preg_match странная особенность или баг?

Статус
В этой теме нельзя размещать новые ответы.

trooll

PHP кодер
Регистрация
22 Дек 2008
Сообщения
482
Реакции
117
PHP:
$data = '<li><a href="search.php?q=%ED%EE%F3%F2%E1%F3%EA+dns" style="color:red">Ноутбуки DNS</a></li>';

preg_match('#<a href="(.+)">#iU', $data, $match_rezult);
unset($match_rezult[0]);

echo $match_rezult[1];

Выводит:
search.php?q=%ED%EE%F3%F2%E1%F3%EA+dns" style="color:red

Не пойму почему выводит именно то, когда должно выводить:
search.php?q=%ED%EE%F3%F2%E1%F3%EA+dns

У кого какие соображения?

=-=-=-=-=-=-=-=-=-=-=-=-=
Добавил решение:
Тфу ты твою мать, не правильно регулярку составил.

Правильная регулярка:
PHP:
preg_match('#<a href="(.+)"#iU', $data, $match_rezult);

P.S.: Модераторы можете удалить тему или же оставить как наглядное пособие для начинающих PHP кодеров.
 
Особенность работы регулярных выражений. Он пытается захватить как можно большее совпадение. > в конце заставляет захватить до последних кавычек, даже если поставить .+?

надо так
'/<a href="(.+?)"/'
 
Особенность работы регулярных выражений. Он пытается захватить как можно большее совпадение. > в конце заставляет захватить до последних кавычек, даже если поставить .+?
надо так
'/<a href="(.+?)"/'
По учёному это называется жадностью и тут она не причём- параметр U - убирает жадность у всех квантификаторов в выражении.
 
KillDead

Признаю, что ошибся. Просто поиск идет не до "первой найденной кавычки", а "первой найденной кавычки, после которой идет >".
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху