Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Интернет » Web-программирование » PHP: Регулярные выражения (RegExp, Regular, eregi, preg)

Модерирует : Cheery

 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61

Открыть новую тему     Написать ответ в эту тему

Rendom



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Учебники регулярных выражений
 
Кто сможет составить выражение для такого случая:

Код:
 
<table border=0>
<tr>
   <td>blablablabla<table border=0><tr><td>blablabla_UNIQTEXT_blablabla</td></tr></table></td>
   <td><table border=1><tr><td>blablabla</td></tr></table>666666</td>
</tr
</table>
 

Нужно удалить из этого всего кусок "<table border=0><tr><td>blablabla_UNIQTEXT_blablabla</td></tr></table>". Иными словами нужно вырезать текст от "<table" до "</table>" внутри которого есть строка "UNIQTEXT", но при этом не удалить лишнего. В результате должно получиться:

Код:
 
<table border=0>
<tr>
   <td>blablablabla</td>
   <td><table border=1><tr><td>blablabla</td></tr></table>666666</td>
</tr
</table>
 

Всего записей: 115 | Зарегистр. 27-10-2002 | Отправлено: 23:26 17-05-2005 | Исправлено: AZJIO, 04:05 09-12-2014
michthill

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
При проверке введенных пользователем данных используется функция ereg($pattern, $data). Типа,
if (!ereg($pattern, $data)) {
 ... обработка ...
}.
Если под UNIX, WinXP для кирилических символов можно было написать типа:
$pattern = "^[А-Яа-я][А-Яа-я ]{1,}$", то под Vista это не работает. Приходится набивать весь алфавит.
На всех платформах используется PHP Version 5.2.6, Apache 2.2.9. Используется кодировка utf-8. Локаль и т.д. установлена. Кто сталкивался с подобным? Может я что-то не учитываю?

Всего записей: 11 | Зарегистр. 06-07-2006 | Отправлено: 14:24 12-08-2008
Jokerjar79



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Пытаюсь реализовать подсветку результатов поиска (под "подсветкой" подразумевается обрамление найденных слов тэгом <span> с опр. стилем). Поиск производится по тексту, в котором может иметься html-разметка. Есть одна тонкость: если искомое слово является тэгом/частью тэга, свойством тэга и т.п., то его подсвечивать не нужно, иначе на странице всплывают наружу куски нарушенной html-разметки. К примеру, в тексте  

Код:
po_1 2_Po 3_pO_ <tag param="noPo4Po5">po6 PO7 po8</tag> po9 po10

в результате поиска по "po" не должны быть подсвечены Po4 и Po5. Алгоритм вроде ясен: если от начала строки до искомого слова отсутствуют тэги, то подсвечиваем, а также, если от последнего закрытого тэга (>) до искомого слова отсутствует начало другого тэга (<).

Код:
  function highlight($word, $subject)
  {
    if ($word == '') return $subject;
    $qm = quotemeta($word);
    $pattern = "((^[^<>($qm)]*)|(>[^<($qm)]*))($qm)";
    $replacement = '\\1<span style="background-color: yellow">\\4</span>';
    return eregi_replace($pattern, $replacement, $subject);
  }

Но такое регулярное выражение подсвечивает только первое вхождение в тексте до начала html-тэгов, а также по одному вхождению в каждом теле тэга и области между тэгами. Такое рег. выражение делает то же самое, но последнее вхождение:

Код:
((^[^<>]*)|(>[^<]*))($qm)

Как сделать, чтобы подсвечивались все вхождения?  
 
Пример для теста. При правильном рег. выражении строки в браузере должны быть одинаковы, но во второй все "po" выделены желтым цветом. Спасибо

Всего записей: 710 | Зарегистр. 08-09-2007 | Отправлено: 07:33 15-08-2008
Cheery



.:МордератоР:.
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Jokerjar79
воспользуйтесь помощью javascript - есть уже готовые скрипты.

----------
Away/DND

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 19:44 16-08-2008
Vasya Pupkin



Мракобес
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Подскажите, плиз, ссылку на хорошие доки по регулярным выражениям. Чтобы доходчиво объяснялся синтаксис и ключи разные.
Спасибо.

----------
я не люблю людей

Всего записей: 7062 | Зарегистр. 24-02-2001 | Отправлено: 18:05 25-09-2008
Cheery



.:МордератоР:.
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Vasya Pupkin
http://www.google.com/search?hl=en&q=php+regexp+tutorial

сколько угодно ссылок..


----------
Away/DND

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 19:03 25-09-2008
Vasya Pupkin



Мракобес
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Cheery, так их-то сколько угодно, да я просил хороший )
Я регулярные выражения знаю что такое и пользуюсь ими в различном софте. Теперь надо ссылку пропарсить в пхп.
Есть вот такая строка:

Код:
<a\s[^>]*href=(\"??)([^\" >]*?)\\1[^>]*>(.*)<\/a>

Я примерно понимаю, что тут происходит, но плохо знаю синтаксис а также возможные комбинации.
Пытался разобрать по http://ru2.php.net/manual/ru/regexp.reference.php
Конечно все можно понять, но думается мне, что есть способы и попроще.
 
Собственно, я так прикинул и мне бы запросто хватила примера работы регэкспа для парсинга линков на картинки гугла.
Т.е. к пример по такому запросу нужно вытащить все линки, начиня от http://tbn0.google.com/images?q=tbn:CZaxdfphjIvPCM:http://www.a-jewels.com/images/Sobaka.jpg
 
Как составить условие для выхватывания только этих ссылок?

----------
я не люблю людей

Всего записей: 7062 | Зарегистр. 24-02-2001 | Отправлено: 10:33 26-09-2008 | Исправлено: Vasya Pupkin, 13:45 26-09-2008
maxrip

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Всем привет имеем код
Код:
<div style="float: right;"><img border="0" class="linked-image" src="http://main.sky/rip/img/logo.png"/></div>
Необходимо с него выдрать тип float, тега div и содержимое src, тега img Изначальное выражение было, которое выдирало только src.
Код:
$txt = preg_replace( "#<img(?:.+?)src=[\"'](\S+?)['\"][^>]+?>#is" , "\[img\]\\1\[/img\]" , $txt );
Я пытался его модернизировать, но увы не соображаю в этом
Сделал нечто подобное, но оно не работает.

Код:
 preg_replace( "#<div style=[\"']float:(left|right)[\"'](?:.+?)><img src=[\"'](\S+?)['\"].+?"."></div>#", "\[IMG=\\1\]\\2\[/IMG\]", $txt );  

 

Всего записей: 4 | Зарегистр. 02-10-2008 | Отправлено: 16:56 02-10-2008 | Исправлено: maxrip, 16:58 02-10-2008
Oleg NT



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Так пойдет?
 

Код:
$txt = preg_replace( "#<div(?:.+)style=\"[^\"]*float:\s*([a-z]+)[^a-z]+[^>]*><img(?:.+)src=\"([^\"]+)\"[^>]*></div>#is" , "[img=\\1]\\2[/img]" , $txt);

 
Но здесь нет поддержки апострофов в значениях HTML-тегов (только кавычки)

Всего записей: 229 | Зарегистр. 09-06-2006 | Отправлено: 16:55 03-10-2008
maxrip

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Огромное спасибо, есть ковычки или нет, пофиг, хтмл я сам генерю).

Всего записей: 4 | Зарегистр. 02-10-2008 | Отправлено: 18:11 04-10-2008
maxrip

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Oleg NT
обнаружил бок
если в $txt будет следующие содержиние

Код:
 
<div style="float: right;"><img border="0" class="linked-image" src="http://img.sky/view_full/2687c1843/i48db19dd153fb.jpg"/></div>
первый линк
<div style="float: right;"><img border="0" class="linked-image" src="http://img.sky/view_full/2687c1843/i48db19dd153fb.jpg"/></div>  
второй линк
<div style="float: right;"><img border="0" class="linked-image" src="http://img.sky/view_full/2687c1843/i48db19dd153fb.jpg"/></div>  
третий линк
 

то после преобразования, на выходе будет

Код:
 
[img=right]http://img.sky/view_full/2687c1843/i48db19dd153fb.jpg[/img]
третий линк
 

таким образом все до последнего вхождения будет удалено. хреново однако+).

Всего записей: 4 | Зарегистр. 02-10-2008 | Отправлено: 20:40 11-10-2008 | Исправлено: maxrip, 20:45 11-10-2008
zadolbali

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Пожалуйста, не пинайте сильно. Проблема такая. Допустим, имеется следующее:
 

Код:
void aaa
{
  if(...)
  {
    try { ... }
    catch(Exception e1)  {  MessageBox.Show(e1.ToString(), "Error");  }
    finally  {  listBox1.EndUpdate();  }
  }
}
 
void aaa
{
  if(...)
  {
    try { ... }
    catch(Exception e1)  {  MessageBox.Show(e1.ToString(), "Error");  }
    finally  {  listBox1.EndUpdate();  }
  }
}
 
итд
 

 
Нужно найти только блоки {...} самого верхнего уровня. То есть, примерно вот это:
 

Код:
{
  if(...)
  {
    try { ... }
    catch(Exception e1)  {  MessageBox.Show(e1.ToString(), "Error");  }
    finally  {  listBox1.EndUpdate();  }
  }
}

 
Выражение для поиска внутренних (не содержащих других) у меня есть: \{(?=[^\{]*\}).*?\}. Но, то что нужно, никак не получается.

Всего записей: 89 | Зарегистр. 01-03-2006 | Отправлено: 01:10 28-10-2008
kiborg2000

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Бьюсь уже долго, что-то не получается.
Задача такова - с помощью preg_split() разбить строки по арифметическим операциям(*,/,-,+).
 
Строка может быть вида:  
 
Код:

Код:
var1+123-3/4*arr12

 
 
А может быть вида
 
Код:

Код:
var1[12-90]+123[11]-3/4*arr12

 
 
Суть в том, чтобы не трогать элементы массива (в котрых есть знаки арифм операций), например var1[12-90], а разбивать по арифметическим операциям только переменные.
 
Надеюсь понятно объяснил, спасибо.

Всего записей: 8 | Зарегистр. 04-11-2008 | Отправлено: 01:40 06-12-2008
Church



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
Надеюсь понятно объяснил, спасибо.

Мне лично абсолютно непонятно, что должно в результате получиться..
 
Но на мой взгляд проще было бы заменить все массивы на уникальный набор символов, обработать результат по стандартной схеме.. ну а потом восстановить массивы.

Всего записей: 1199 | Зарегистр. 05-09-2003 | Отправлено: 01:47 06-12-2008
kiborg2000

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Попробую еще раз объяснить.
Есть строка: var1[12-90]+a123[11]-3/4*arr12  
 
Она должна разбиться на следующие элементы: var1[12-90], a123[11], 3, 4, arr12  
 
То есть хоть в массива var1[12-90] и есть знак "-", он тем не менее, не разбивается.

Всего записей: 8 | Зарегистр. 04-11-2008 | Отправлено: 01:59 06-12-2008 | Исправлено: kiborg2000, 02:00 06-12-2008
Cheery



.:МордератоР:.
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
kiborg2000
Лень было думать над возможными вариантами для регулярки.. вот что то в лоб

Код:
<?php
  $str='var1[12-90]+123[11]-3/4*arr12';
  $data=preg_split('/([\-\+\*\/])/',$str,-1,PREG_SPLIT_DELIM_CAPTURE);
  $data2=array();
  $i=0;
  if (count($data)>=3)
   while($i<count($data))
    {
     if (preg_match('/\[\d+$/',$data[$i]) &&  preg_match('/^\d+\]/',$data[$i+2]))  
      {$data2[]=$data[$i].$data[$i+1].$data[$i+2];$i+=3;}
     elseif (!preg_match('/[\-\+\*\/]/',$data[$i])) {$data2[]=$data[$i];$i++;}
     else $i++;
    }
  print_r($data2);
  echo "<br>was:<br>".$str;
?>

пошло, но утонченное лень придумывать

----------
Away/DND

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 03:29 06-12-2008
ForposT_ForeveR



Full Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Здравствуйте, уважаемые форумчане.
Подскажите пожалуйста, в переменной $results - html'ный код страницы.
Один из тэгов
 

Код:
 
<input type="hidden" id="action" value="ЭТО НАДО ПОЛУЧИТЬ" />
 

 
Как получить,точнее отпарсить, значение этой формы. Форма - уникальная.
Заранее спасибо за помощь.

Всего записей: 525 | Зарегистр. 11-12-2004 | Отправлено: 16:55 08-01-2009 | Исправлено: ForposT_ForeveR, 17:20 08-01-2009
michthill

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ForposT_ForeveR
$results = "<input type=\"hidden\" id=\"action\" value=\"ЭТО НАДО ПОЛУЧИТЬ\" />";
if (preg_match('%<input.*id="action".*value="(.*)"\s+/>%', $results, $regs)) {
    $value = $regs[1];
} else {
    $value = "";
}
print_r($value);
 
Добавлено:
ForposT_ForeveR
Код для php

Всего записей: 11 | Зарегистр. 06-07-2006 | Отправлено: 16:27 09-01-2009
ForposT_ForeveR



Full Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
michthill
 
Спасибо, всё работает на УРА.

Всего записей: 525 | Зарегистр. 11-12-2004 | Отправлено: 18:22 09-01-2009
eternal2000



Junior Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
подскажите регулярное выражение чтобы из тэга вырезать часть кода, пример такого тэга:
<img src="assets/images/photo/aos_1.jpg" />
 
нужно вытащить часть адреса (src) а именно что идет между:
<img src="assets/images/photo/ и " />
в данной ситуации это будет "aos_1.jpg"
 
причем именно до первой кавычки надо, т.к. после атрибута src еще могут идти другие атрибуты (alt, title и т.д.) т.е. между src="assets/images/photo/ и "
 
еще примеры:
$a = '<img width="152" height="147" src="assets/images/photo/10/thumb_in-blue-1600.jpg"/>'
на выходе: "10/thumb_in-blue-1600.jpg"
$a = '<img vspace="10" hspace="10" border="0" src="assets/images/photo/picture_6.gif" alt="задаём параметр"/>'
на выходе: "picture_6.gif"
и т.д.

Всего записей: 185 | Зарегистр. 11-11-2007 | Отправлено: 20:50 09-01-2009 | Исправлено: eternal2000, 20:54 09-01-2009
eternal2000



Junior Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
все! уже не надо сам написал =) :
 
$img = '<img src="assets/images/photo/aos_1.jpg" />';
preg_match('%assets/images/photo/(.*(jpg|gif|png))%i', (strstr($img, 'assets/')), $imgsrc);
echo $imgsrc[1];

Всего записей: 185 | Зарегистр. 11-11-2007 | Отправлено: 11:48 10-01-2009
Открыть новую тему     Написать ответ в эту тему

Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61

Компьютерный форум Ru.Board » Интернет » Web-программирование » PHP: Регулярные выражения (RegExp, Regular, eregi, preg)


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru