Войти

Показать полную графическую версию : регулярные выражения


Страниц : 1 2 [3] 4

Vlad Drakula
16-05-2005, 22:12
slaine
у них разная семантика...

Siava one
16-06-2009, 17:30
Помогите пожалуйста решить задачку с preg_replace :)
Имеем массив $pattern, с элементами примерно такого содержания:

"'(?<!/)topic.php\?t=([0-9]*)'"

и $replacement подобного вида:

'topic$1.html'

Каким образом надо составить регулярное выражение в $pattern, чтобы преобразовывалось строго topic.php в topic.html, а не всё подряд, содержащее слово topic, например viewtopic.

Sham
17-06-2009, 15:55
$text = preg_replace
(
'{\btopic\.php\?t\=([0-9]*)}i',
'topic${1}.html',
$text
);

LaoTsi
25-06-2009, 23:10
набор статей и утилит для работы с рег.выражениями http://www.smashingmagazine.com/2009/06/01/essential-guide-to-regular-expressions-tools-tutorials-and-resources/

Artem-Samsung
10-07-2009, 20:10
Есть строка:

джерело: SS<br /><br />Між прем&quot;єрами у Лондоні та Нью-Йорку Том Фелтон встиг побувати у Канаді. І не просто проїздом, а дуже активно займався там рекламою шостого фільму про Гаррі Поттера. Він побував на кількох телешоу, і зараз ми маємо змогу подивитися відео. <br /><br /><div align='center'><a href="http://gallery.ru/watch?ph=yw1-byMau" target="_blank"><img src="http://data9.gallery.ru/albums/gallery/93673-ca012-20642300-400.jpg" border="0" class="linked-image" /></a> <a href="http://gallery.ru/watch?ph=yw1-byL6T" target="_blank"><img src="http://data9.gallery.ru/albums/gallery/93673-ed090-20642077-400.jpg" border="0" class="linked-image" /></a><br /></div><br />По-перше, це відео з передачі <b>Much on Demand</b>, на якій Том розповів про роль Драко у &quot;Напівкровному Принці&quot;та &quot;Смертельних реліквіях&quot;, а також про свої акторські плани та проекти, які його цікавлять. Дивимося: <a href="http://www.youtube.com/watch?v=mdAKv1TJ8qU&amp;feature=player_embedded" target="_blank">частина 1</a>, <a href="http://www.youtube.com/watch?v=lNGAdWGVRoA&amp;feature=player_embedded" target="_blank">частина 2</a>.<br /><br />Ще одне відео з Торонто, в якому Фелтон обговорює трансформацію свого персонажа, дивимося <a href="http://www.youtube.com/watch?v=b0foEfzQXfE&amp;feature=player_embedded" target="_blank">тут</a>.<br /><br />Ну і нарешті відео з канадсього MTV можна побачити <a href="http://www.youtube.com/watch?v=G0_nHEm9MEw&amp;feature=player_embedded" target="_blank">тут</a>.<br /><br />А більше фото з канадського турне Фелтона шукайте в <a href="http://sajuka.gallery.ru/watch?a=yw1-bX05" target="_blank">альбомі</a>.

Нужно преобразовать в переменную, что бы из нее удалилось <div class='center'>любой текст</div> и все последующие за этим <br />
т.е. в данном тексте убралось бы:


<div align='center'><a href="http://gallery.ru/watch?ph=yw1-byMau" target="_blank"><img src="http://data9.gallery.ru/albums/gallery/93673-ca012-20642300-400.jpg" border="0" class="linked-image" /></a> <a href="http://gallery.ru/watch?ph=yw1-byL6T" target="_blank"><img src="http://data9.gallery.ru/albums/gallery/93673-ed090-20642077-400.jpg" border="0" class="linked-image" /></a><br /></div><br />

Sham
10-07-2009, 20:20
Нужно преобразовать в переменную, что бы из нее удалилось <div class='center'>любой текст</div> и все последующие за этим <br /> »
preg_replace с регуляркой типа
{\<div\s+align\=\'center\'\>.+?\<\/div\>\s*(?:\<br \/\>\s*)*}is

Artem-Samsung
11-07-2009, 01:54
Sham, прикольно :)
спасибо, как бы это все самостоятельно разобрать... )

Просто гуру, с первого раза заработало все, как нужно...
Возьмите в ученики :)

Artem-Samsung
19-09-2009, 02:17
Помогите еще чуток.
Заменить
<p><a href="http://domen.com/node/40862?">читать дальше</a></p>
на "..." (три точки)

40862 - это число может изменяться

Sham
19-09-2009, 02:34
{\<p\>\s*\<a\s+href\=\"?http\:\/\/domen\.com\/node\/\d*\??\"?\>\s*читать\s+дальше\s*\<\/a\>\s*\<\/p\>}i

Artem-Samsung
13-10-2009, 00:13
Прошу помощи.
Как со странички Банка (http://www.usb.com.ua/ru/retail/non-trading/currency_cheques/currency/usb_rate/) поместить в переменную продажу USD и EUR ? на PHP

Sham
13-10-2009, 01:10
функцией preg_match или preg_match_all

Artem-Samsung
26-11-2009, 20:36
функцией preg_match или preg_match_all »

Есть строка.

$data = "<td>USD</td><td>7,9</td><td>8,1</td>";



Искомое: 8,1 обозначаю его \d\,\d
Слева стоит: <td>USD</td><td>7,9</td><td>, где 7,9 тоже может быть динамическим, по этому обозначаю \d\,\d
Справа стоит: </td>

Выражение, которое описывает условие :

$a = preg_match_all("/(?<=<td>USD<\/td><td>\d\,\d<\/td><td>)\d\,\d(?=<\/td>)/", $data, $matches);

На выходе (echo $a) получается:

<td>USD</td><td>7,9</td><td>8,1</td>

совсем не 8,1


$data = "<td>USD</td><td>7,9</td><td>8,1</td>";
$a = preg_match_all("/(?<=<td>USD<\/td><td>\d\,\d<\/td><td>)\d\,\d(?=<\/td>)/", $data, $matches);
echo $data;


Отметить стоит еще то, что в процессе вылазили ошибки типа:

Warning: preg_match_all() [function.preg-match-all]: Compilation failed: lookbehind assertion is not fixed length at offset 39

когда пытался цифры описать так: \d*\d*. Как сделать что бы с * - работало?, а то даже на {1,3} матерится.

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

Спасибо

Sham
26-11-2009, 21:18
http://docs.php.net/manual/ru/regexp.reference.php
Утверждения касательно предшествующего текста начинаются с (?<= для положительных утверждений и (?<! для отрицающих. Например, (?<!foo)bar не найдёт вхождения "bar", которым не предшествует "foo". Сами утверждения 'назад' ограничены так, чтобы все подстроки, которым они соответствуют, имели фиксированную длину. Но, в случае, если используются несколько альтернатив, они не обязаны иметь одинаковую длину. Таким образом шаблон (?<=bullock|donkey) корректен, но (?<!dogs?|cats?) вызовет ошибку во время компиляции.
т.е. квантификаторы повторения не прокатят ибо длина будет произвольная, и вообще вы зашли в дебри, откуда дорога только на дурку...

preg_match
(
'{\<td[^\>]*\>\s*USD\s*\<\/td\>\s*\<td[^\>]*\>\s*[\d\,]+\s*\<\/td\>\s*\<td[^\>]*\>\s*([\d\,]+)\s*\<\/td\>}i',
$data,
$matches
);

// понатыкал \s (возможных пробелов) и [^\>]* вероятных атрибутов у таблицы
// это делается, чтобы меньше регулярку исправлять в будущем...

echo $matches[1]; //тут искомое должно быть

UPD
Если ищется только одно значение, то preg_match...

Artem-Samsung
26-11-2009, 22:17
Забавно так даже) получилась двухмерный массив. Результат в echo $matches[1][0];

Sham
26-11-2009, 22:24
получилась двухмерный массив »
это если preg_match_all (она все совпадения ищет), а если preg_match, то одномерный.

Artem-Samsung
08-07-2010, 15:08
Есть небольшой код:
Например:
<p><div align="center"><img border="0" alt="" src="/uploads/news/banners/M-audio_Studiophile_BX5a_Deluxe-2.jpg" />

Нужно заменить
/uploads/news/banners/M-audio_Studiophile_BX5a_Deluxe-2.jpg
на
http://site.com/uploads/news/banners/M-audio_Studiophile_BX5a_Deluxe-2.jpg

Пока пытаюсь выцепить путь к файлу.

preg_match ('{src=\"([.]+)\"}', $string, $match);
Возвращается пустой результат. Help
:help:

Sham
08-07-2010, 21:01
preg_match ('{src=\"([.]+)\"}', $string, $match); »
если нужно вытащить путь, то можно попробовать так
preg_match ('{src\=\"([^\"\s]*\/)?[^\/\"\s]+\"}', $string, $match);
echo $match[1];

шаблон получился общий, поэтому для лучшей "зацепки" лучше добавить возможные расширения файлов в src

Artem-Samsung
08-07-2010, 22:22
Разобрался в этом, большое спасибо.
А вот теперь мне нужно разобраться с preg_replace

Вариант такой, и работает:

$pattern = "{(src\=\")([^\"\s]*\/[^\/\"\s]+\")}";
$replacement = "$1http://djone.com.ua$2";
echo preg_replace($pattern, $replacement, $banner['cont']);

Есть ли еще какой то, может более эстетический способ решения?

Sham
08-07-2010, 23:16
echo preg_replace
(
'{(?<=src\=\")([^\"\s]*\/[^\/\"\s]+\.(?:png|jpe?g|bmp|gif))(?=\")}i',
'http://djone.com.ua${1}',
$banner['cont']
);

1. уточняющие расширения картинок для ускорения, и src есть не только у img
2. одинарные кавычки лучше, ибо двойные парсятся PHP как строки.

Artem-Samsung
21-03-2012, 00:39
Помогите составить регулярное выражение

Есть строковая переменная, которая в себе содрежит в частности такой текст:

<li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-66" id="menu-item-66"><a href="http://premises.kiev.ua/m/pro-kompaniyu/">Про компанію</a>
<ul class="sub-menu">
<li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-72" id="menu-item-72"><a href="http://premises.kiev.ua/m/pro-kompaniyu/proekty/">Проекти</a></li>
<li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-71" id="menu-item-71"><a href="http://premises.kiev.ua/m/pro-kompaniyu/kolektyv/">Колектив</a></li>
<li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-73" id="menu-item-73"><a href="http://premises.kiev.ua/m/pro-kompaniyu/chomu-z-namy-vyhidno/">Чому з нами вигідно</a></li>
</ul>
</li>

Мне нужно в гиперссылку
<a href="http://premises.kiev.ua/m/pro-kompaniyu/">Про компанію</a>

добавить class="drops"

Я пытаюсь сделать это таким образом

$pattern = "/(<li\sclass=\"menu-item\s[a-zA-Z0-9\-\s]*\" \sid=\"[a-zA-Z0-9\-\s]*\"><a\s)/i";
$menu = preg_replace($pattern, "${1} class='drops'", $menu);

но никак не получается




© OSzone.net 2001-2012