Предположим, у меня есть действительный html файл, который я сохраняю в строке. Теперь я хочу извлечь ссылки якорных элементов (hrefs). Поэтому я хочу использовать чистые регулярные выражения.
preg_match_all('/<a [^>]*href="(.+)">/', $html, $match);
Обычно я хочу получить такую строку:
http://www.thisIsAHrefLinkIWantToHave.de
Но вместо этого я получаю также следующую строку, логическую вызванную (. +) В регулярном выражении:
index?a=f">Link</a> <a href="index?a=ds">Link 2</a> <a href="index?b=b">Link 3</a> <a href="index?gf=d">Link 4</a> <a href="index?ttt=q">Link 5</a> <a href="index?g=my">Link 6</a> <a href="http://mysite.org
Я нашел такие решения, как Xpath или DOMDocument (PHP String Manipulation: Extract hrefs). Но я хотел бы иметь решение без этих/любых библиотек, просто с регулярным выражением. Что мне нужно сделать, чтобы решить вопрос о моем регулярном выражении?
Я думал о первом "к следующему". Но как создать этот шаблон или другой шаблон, который решает проблему?
[EDIT:] Решение
preg_match_all('/<a [^>]*href="([A-Za-z0-9\/?=:&_.]+)?"/', $html, $match);
Муса прав, потому что период (.) Является жадным. попробуйте [A-Za-z0-9 _] + вместо. +
Попробуйте preg_match_all('/<a [^>]*href="(.+)?">/', $html, $match);
, ?
делает .*
не жадный.