[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Вопрос про жадные и ленивые выражения
program90
А почему регулярное выражение <.*> возвращает всю строку с тегами, а <.*?> - только отдеьлные теги? В wikipedia это не объясняется. Написано что это так и все. Непонятно как читать ? после *. Звездочка означает что символ входит любое число раз. А ? означает ноли или один раз. Как тогда прочитать <.*?> ?
Спасибо



Спустя 35 минут, 36 секунд (5.11.2010 - 23:17) kirik написал(а):
Цитата (program90 @ 5.11.2010 - 14:41)
Звездочка означает что символ входит любое число раз. А ? означает ноли или один раз.

Это верно. Но если знак вопроса идет после + или * это уменьшает "жадность" выражения. Тоесть оно перестает захватывать все на своем пути.
Толковое объяснение можно найти на php.net (на английском).
Цитата
However, if a quantifier is followed by a question mark, then it becomes lazy, and instead matches the minimum number of times possible

Спустя 33 минуты, 8 секунд (5.11.2010 - 23:50) program90 написал(а):
А почему оно должно захватывать все? Что это значит на таком примере:
<p><b>Википедия</b> — свободная энциклопедия, в которой <i>каждый</i> может изменить или дополнить любую статью</p>

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

Спустя 4 минуты, 51 секунда (5.11.2010 - 23:55) kirik написал(а):
Цитата (program90 @ 5.11.2010 - 15:50)
Т.е. будет взято все что находится между первой скобкой, и самой последней, в конце всего текста?

Ага. А если вопросительный знак будет, то захавает только до первого совпадения.
Цитата (program90 @ 5.11.2010 - 15:50)
Т.е. под ленивостью имеется ввиду, что в случае, когда две строки подходят, и одна короче другой, и обе начинаются с одного места, выбрана будет та строка, которая длиннее?

Скорее наоборот - ленивый не пойдет дальше первого совпадения, т.е. строка будет короче.

UPD
Цитата

При строке:
<p><b>Википедия</b> — свободная энциклопедия</p>
жадный сожрет всю строку:
<p><b>Википедия</b> — свободная энциклопедия</p>
а ленивый только:
<p>

Спустя 7 минут, 21 секунда (6.11.2010 - 00:02) program90 написал(а):
понятно. Спасибо большое!
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.