Regexp и тупизм

Farsh

~ on ~ high ~ wave ~
Regexp и тупизм

Sorry. Delete please.

P.s. у меня всегда так, что как только нажимаешь на "Создать тему", понимаешь, в чем твоя ошибка.

-~{}~ 15.06.10 21:02:

А нет, возвращаюсь.

PHP:
$str = 'test<a href="#" test="test">test</a>test';
$regexp = '/<a href="(.+?)">(.+?)<\/a>/';

$matchesCount = preg_match($regexp, $str, $matches);
Вопрос: откуда он здесь находит совпадение ?
 

Adelf

Administrator
Команда форума
'#" test="test' вполне подходит под .+ условие :)
 

Farsh

~ on ~ high ~ wave ~
у меня ".+?", а не ".+". Аналогично добавленю "U" модификатора. По теории, он должен хавать href="#", далее увидеть, что там не символ ">" и идти искать дальше, в результате ничего не найдя.
 

MiksIr

miksir@home:~$
Нет, ограничение жадности работает лишь для выбора из нескольких подходящих совпадений всего шаблона. В данном случае совпадение есть и оно одно. Вам нужно [^"]+
 

Farsh

~ on ~ high ~ wave ~
MiksIr
Про [^"]+ прекрасно знал, просто наткнулся на такое и не понял нифига.

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

MiksIr

miksir@home:~$
Выбирается подходящее совпадение всего шаблона. Оно есть, как указали. А вот если бы вариантов совпадения шаблона было бы несколько, например /".+"/ и текст "раз"два" - то только в этом случае работает ограничение жадности - по-умолчанию берется наболее длинное совпание, с ограничением жадности .+? - наиболее короткое. В вашем случе вариантов нет, есть только одно валидное, оно и выбрано.

-~{}~ 15.06.10 21:35:

А вот если бы строка была бы такая
test<a href="#" test="test">test</a>test<a href="#" test="test">test</a>test
То тут без ограничения жадности первая группа была бы
#" test="test">test</a>test<a href="#" test="test
а с ограничением останется #" test="test
 
Сверху