Для примера давайте посмотрим на этот пример:
target="_blank">EXTRACT THIS</a>
Я хочу извлечь этот текст, который является гиперссылкой. Я использую следующий код:
preg_match("/target=\"_blank\">(.*)<\/a>/", $content, $result);
Проблема в том, что могут быть перекрывающиеся комбинации, такие как:
<a href="LINK" target="_blank">TEXT</a> <a href="LINK_2" target="_blank">TEXT_2</a>
и это правило также вернет:
TEXT</a> <a href="LINK_2" target="_blank">TEXT_2
что я явно не хочу.
Вопрос в том, как избежать таких совпадений?
Проблема в том, что ваш RE:
(.*)
Говорит, чтобы захватить все. . * Известен как жадный и захватит все, что может.
Есть два решения для этого.
Один:
(.*?)
Нежадная операция. *
Два:
([^<]*)
Просто сопоставьте все, что не является < персонаж. Это быстрее чем. *?
Других решений пока нет …