Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: PCRE - общие вопросы
Форумы портала PHP.SU » PHP » Регулярные выражения » PCRE - общие вопросы

Страниц (1): [1]
 

1. Pavelbeginner - 16 Августа, 2010 - 01:09:45 - перейти к сообщению
можно ли в PCRE задать поиск повторяющегося слова или фразы, то есть мне например нужно найти Меня зовут Паша Меня зовут Паша, то есть, чтобы за одной фразой шла другая и так до бесконечности? То есть, если нужно символ повторить, то это делается так .*, а как это же сделать, но над целой фразой?
(Добавление)
Или необязательно слова, например мне нужно, чтобы вот такая конструкция искалась бесконечно много раз : .*?:.*?<<<.*? можно ли как-то это сделать?
2. JustUserR - 16 Августа, 2010 - 01:42:56 - перейти к сообщению
Pavelbeginner пишет:
То есть, если нужно символ повторить, то это делается так .*, а как это же сделать, но над целой фразой?
Для применения оператора квантификации в группе символов необходимо предварительно заключить их в скобки - причем если вы не хотите делать их запоминающими то можете использовать конструкцию (?: text )
3. Pavelbeginner - 16 Августа, 2010 - 02:11:57 - перейти к сообщению
А могу я внутри скобок помимо обычных символов использовать метасимволы, в общем могу ли я например записать так Я (оч.?нь)* люблю кашу
4. Uchkuma - 16 Августа, 2010 - 09:10:14 - перейти к сообщению
Pavelbeginner пишет:
если нужно символ повторить, то это делается так .*

'.' - это один любой символ. '*', '?' и '+' идущие за символом или классом обозначают количество их повторений.
'*' - от 0 до бесконечности
'?' - 0 или 1
'+' - 1 и более
Т.о. '.*' - символ может как повторяться, так и его может вообще не быть. Если нужно задать его 100% повторение, надо писать так '.{2}', т.е. от 2-х раз и более.
'{x,y}' - такая конструкция задает конкретное количество повторений стоящего перед ней символа или класса от 'x' до 'y'. Если 'y' опущен, то от 'x' до бесконечности.

Pavelbeginner пишет:
в общем могу ли я например записать так Я (оч.?нь)* люблю кашу

'Я (оч.?нь)* люблю кашу' - под такой шаблон попадут такие фразы:
Я очень люблю кашу
Я очнь люблю кашу
Я люблю кашу
Я оченьочень люблю кашу
Я очньочнь люблю кашу
А также 'Я оченьоченьоченьоченьоченьочень люблю кашу' Радость
5. JustUserR - 17 Августа, 2010 - 01:44:56 - перейти к сообщению
Pavelbeginner пишет:
А могу я внутри скобок помимо обычных символов использовать метасимволы
В регулярных выражениях скобки выполняют функцию группирования - и могут содержать любые допустимые элеметны в том числе такие же группирующие скобки - при этом порядок поиска соответствий по шаблону происходит так что значения числа используемых вхождений для внешних и внутренних квантификаций - подбирается таким образом чтобы достичь совпадения всего шаблона в целом
При этом если вы используете операцию предварительноно просмотра вперед или назад - то все находящиейся в нее подшаблоны не могут содержать квантификацию с динамически определяемым числом вхождений

 

Powered by ExBB FM 1.0 RC1