Ru-Board.club
← Вернуться в раздел «Web-программирование»

» PHP: Регулярные выражения (RegExp, Regular, eregi, preg)

Автор: Delphi6
Дата сообщения: 23.11.2006 13:07
sTa1kEr
Молодец, спасибо, у тебя всегда простое но оригинальное решение
Автор: alex_gall
Дата сообщения: 29.11.2006 21:19
кстати, никто не подскажет как на регулярных выражениях вытащить из этой строки
/gallery/p17_sectionid/1/p17_imageid/1

мне нужно вытащить только "gallery"... точнее последнее слово перед первым входом /p№_

Кто подскажет?
Автор: edogs
Дата сообщения: 30.11.2006 01:47
alex_gall
~/(.*?)/p\d+?~
Автор: alex00
Дата сообщения: 01.12.2006 08:20
Подскажите какой регуляркой найти парные тэги внутри которых известен фрагмент текста.

Например надо вытянуть

Код: <tr>test<td id=2>test</tr>
Автор: sTa1kEr
Дата сообщения: 01.12.2006 10:47
alex00
А почему закрывающего тега </td> нету?

Попробуй такое выражение:

Код:
|<[^>]+>.*test.*</[^>]+>|iU
Автор: alex00
Дата сообщения: 01.12.2006 16:04
sTa1kEr, ну я тот пример из головы взял и <td id=2> просто левый текст. Хотя если это не XHTML, то вроде закрывающую </td> ставить не обязательно
Твоя регулярка мне в первую очередь найдет найдет первую пару <tr> ... </tr>, вот эту <tr>test<td id=1>test</tr>
А мне надо грубо говоря надо найти только вторую пару <tr> ... </tr> по признаку нахождения <td id=2> внутри. Ну или по признаку id=2 - это не важно. Можно конечно сделать с твоим регэкспом preg_match_all и пройтись по каждому матчу отдельно с допольнительной проверкой, но хочется "одним махом семерых побивахом" )

Еще другими словами что мне надо - как заставить какую-то часть регулярки срабатывать не на первом подходящем совпадении (самое левом), но находить последнее совпадение (самое правое).
Либо как вариант нужна регулярка ищущая любую последовательность символов, но такую что не включает в себя последовательность "xxx". Тут вроде (.(?!xxx))*? подходит, но я уже говорил - с такой регуляркой ПХП на больших строках просто сдыхает без сообщений об ошибке. Может надо здесь сделать отсечения бэктрекига или что-то типа того - я в этом не разбираюсь, потому и спрашиваю

Добавлено:
Ура! Ура! Ура! Таки угадал - надо было делать отсечение бэктрекинга
Такая регулярка заработала и на больших строках, где раньше ПХП валилось
Код: @<tr>(?>.(?!</tr>))*?<td id=2>.*?</tr>@i
Автор: gateway
Дата сообщения: 06.12.2006 12:59
А мне хотелось бы изменить все относительные ссылки на абсолютные (или просто добавить "http://www."
Типа: articles/article1.html -> /common/myarticles/articles/article1.html

как можно сделать ,please
Автор: edogs
Дата сообщения: 26.12.2006 04:46
Нужно выдернуть со страницы все ссылки НЕ начинающиеся с http://
Формат строгий
<a href="httр://site.ru">text</a>
или
<a href="hyp.html">text</a>
Как?
Автор: Say26
Дата сообщения: 27.12.2006 15:18
edogs
Помоему проще всего найти вообще все ссылки, а потом из массива поудалять те, которые начинаются с http://
Автор: Cheery
Дата сообщения: 28.12.2006 03:04
edogs
с отрицаниями в регулярках есть свои неудобства. с отрицанием слов, а не символов.. возможно удобнее сделать как сказал Say26, ну или так..

Код: /<a[\s]+[^>]*?href[\s]?=[\s\"'`]*([^h][^t][^t][^p][^:]*?)[\"'`]*>/i
Автор: DenDruiD
Дата сообщения: 28.12.2006 08:06

Код: /<a[\s]+[^>]*?href[\s]?=[\s\"'`]*([^:]*?\..+?)[\"'`]*>/i
Автор: Cheery
Дата сообщения: 28.12.2006 23:25
DenDruiD

Цитата:
Вроде не накосячил

точка \. там ни к чему.. ссылка может быть и на директорию без точки в ее названии.
да и по сути, часть ниже тоже не нужна.

Цитата:
\..+?

Автор: DenDruiD
Дата сообщения: 29.12.2006 09:15
Хм. Ну нам же надо получить сам текст ссылки на выходе.

Тогда, может, так?

Код: [\s\"'`]*([^:]*?(?:\\|\/).+?|[^:]*?\..+?)[\"'`]*
Автор: volodyalipkin
Дата сообщения: 03.01.2007 21:08
Имеется набор строк, часть из них имеет внутри себя выражения в скобках. Надо написать reqexp, который заменит строки без скобок на пустые, а со скобками на строки в скобках.

Код:
abcd -> пустая строка
qwe (123) -> 123
Автор: Cheery
Дата сообщения: 03.01.2007 21:10
volodyalipkin

Цитата:
Имеется набор строк, часть из них имеет внутри себя выражения в скобках. Надо написать reqexp, который заменит строки без скобок на пустые, а со скобками на строки в скобках.

preg_replace_all('/.*(\(.*\)).*/U','($1)',$str);

ps: не проверял
Автор: quasar
Дата сообщения: 16.01.2007 15:11
Как при поиске вырвать из текста кусок фразы с искомым словом?

Ну типа как текст после ссылок на Яндексе
Автор: DenDruiD
Дата сообщения: 16.01.2007 15:44
насколько кусок?
Автор: quasar
Дата сообщения: 16.01.2007 17:21
ну я вот сам не знаю, как это определить лучше..

какие варианты бывают?

просто по 50 символов слева-справа? или там, по 20 слов?
Автор: edogs
Дата сообщения: 16.01.2007 17:56
quasar

Цитата:
просто по 50 символов слева-справа?

кажется так
(.{50}фраза.{50})
Автор: vergiliy2
Дата сообщения: 20.01.2007 14:53
Вы не подскажете как с помощию регулярных вырожений убрать из:
<LI value=2>
<DIV class=title>Нужный текст</DIV>
<DIV class=text>Тоже нужный текст</DIV>
<DIV class=info><SPAN style="COLOR: #060">Нужный текст</SPAN></DIV>
<DIV class=info><NOBR>Ненужный текст</NOBR></DIV>
<LI value=3>
<DIV class=title>Нужный текст</DIV>...(и так далее)

текст <DIV class=info><NOBR>Ненужный текст</NOBR></DIV>?
т.е. в итоге должно получиться:
<LI value=2>
<DIV class=title>Нужный текст</DIV>
<DIV class=text>Тоже нужный текст</DIV>
<DIV class=info><SPAN style="COLOR: #060">Нужный текст</SPAN></DIV>
<LI value=3>
<DIV class=title>Нужный текст</DIV>...(и так далее)

P.S. Тексты визде произвольные
Автор: SERGE_BLIZNUK
Дата сообщения: 20.01.2007 20:48
vergiliy2
Цитата:
<DIV class=info><NOBR>Ненужный текст</NOBR></DIV>
что-то гуру все молчат...
тогда предложу свой дилетанский вариант решения "в лоб":

Код: /\<DIV class\=info\>\<NOBR\>.+?\<\/DIV\>/i
Автор: sTa1kEr
Дата сообщения: 22.01.2007 11:50
SERGE_BLIZNUK

Цитата:
/\<DIV class\=info\>\<NOBR\>.+?\<\/DIV\>/i

1. Вызовет ошибку компиляции шаблона
2. Экранировать "=", "<" и ">" не нужно
vergiliy2
Если внутри div-а не должно быть тегов и переносов строки.

Код:
$s = preg_replace("|<div\s+class=\"?info\"?\s*>\s*<nobr>[^<]+</nobr>\s*</div>|i", "", $s);
Автор: SERGE_BLIZNUK
Дата сообщения: 22.01.2007 12:16
sTa1kEr
Цитата:
1. Вызовет ошибку компиляции шаблона
какую ошибку? вообще-то, я проверил, на PHP5 все отработало как часы...
Цитата:
2. Экранировать "=", "<" и ">" не нужно
это может быть. Открыл хелп и тщательно переписал оттуда символы, которые экранируются функцией preg_quote() [more]
Функция preg_quote() принимает строку str и добавляет обратный слеш перед каждым служебным символом. Это бывает полезно, если в составлении шаблона участвуют строковые переменные, значение которых в процессе работы скрипта может меняться.

В случае, если дополнительный параметр delimiter указан, он будет также экранироваться. Это удобно для экранирования ограничителя, который используется в PCRE функциях. Наиболее распространенным ограничителем является символ '/'.

В регулярных выражениях служебными считаются следующие символы: . \\ + * ? [ ^ ] $ ( ) { } = ! < > | :
[/more]

кстати, на переводы строки и дополнительные тэги в Ненужном тексте, моему варианту глубоко плевать...
А вообще, хорошо - vergiliy2 получил целых два рабочих варианта. Можно выбрать более понятный - подходящий-)


Автор: sTa1kEr
Дата сообщения: 22.01.2007 12:39
SERGE_BLIZNUK

Цитата:
какую ошибку? вообще-то, я проверил, на PHP5 все отработало как часы...

Прошу прощенья, не заметил экранирующий слешь. Слишком уж их много у тебя

Цитата:
кстати, на переводы строки и дополнительные тэги в Ненужном тексте, моему варианту глубоко плевать...

Правда?
Попробуй с такой строкой

Код:
<DIV class=info><NOBR>Ненужный
текст</NOBR></DIV>
Автор: Jokerjar
Дата сообщения: 26.01.2007 11:30
Хоть убейте, не могу понять как работает функция ereg_replace... Помгите написать 2 функции:

Первая преобразовывает все вхождения типа [no]ssilka в <a target="_blank" href="ssilka">ssilka</a>

Вторая: text в <a target="_blank" href="ssilka">text</a>[/no]

Спасибо
Автор: Jokerjar
Дата сообщения: 28.01.2007 11:50
Ну плииииз! Помогите... Действительно очень нужно. По-любому кто-то обладает в регулярных выражениях...
Автор: andead
Дата сообщения: 17.02.2007 16:16
есть кусок кода:

Код: echo preg_replace('/\[b_](.*)\[\/b_]/', '<b>$1</b>', '[b_]рас [b_]два[/b_][/b_]');
Автор: Advanced_Guest
Дата сообщения: 17.02.2007 22:17
andead
while(preg_match(регексп,$str))
$str=preg_replace(регексп,... );
Автор: andead
Дата сообщения: 18.02.2007 11:14
Advanced_Guest
без этого никак? может модификатор какой модный есть?
Автор: niktata
Дата сообщения: 10.04.2007 22:51
Буду признателен, если поможете.
Имеется:

Код:
<td style='color: #555555'><p><img src="/files/resumes/id41.jpg" border="1" alt="Администратор" title="Администратор" width="200" height="311" align="left" />Без вредных привычек,коммуникабельная,общительная,обучаемая,есть большое желание работать,доброжелательная.</p><p>Навыки:ПК,неплохо печатаю на комп,продажи из бара и абонементов,отчеты,солярий,ответы на телефоные звонки,чистота,касса.</p></td>

Страницы: 12345678910111213141516171819202122232425262728293031323334

Предыдущая тема: Xitami Web Server + PHP+ zend optimizer


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.