preg_match_all не совпадает при использовании в каратах (^) - PullRequest
2 голосов
/ 30 мая 2011

Я использую preg_match_all, чтобы найти URL в файле HTML. URL всегда появляется в начале строки без начального пробела, например:

<A HREF="/link/to/here"><strong>Next</strong></A>

Я использовал это, чтобы соответствовать:

preg_match_all('|^<A HREF="(?<url>.*?)"><strong>Next</strong>|', $html, $url_matches);

Это не сработало, пока я не удалил символ в каратах (^). Я думал, что карат соответствует началу линии. Почему это приводит к провалу моего матча?

Ответы [ 2 ]

4 голосов
/ 30 мая 2011

Вы должны добавить модификатор m:

preg_match_all('|^<A HREF="(?<url>.*?)"><strong>Next</strong>|m', $html, $url_matches);

затем ^ совпадает в начале строки, иначе оно будет совпадать только в начале всей строки.

Подробнее: http://php.net/manual/en/reference.pcre.pattern.modifiers.php

3 голосов
/ 30 мая 2011

^ соответствует начало строки не начало строки .Используйте модификатор m («многострочный»): //m

...