Как игнорировать разные комбинации в preg_match

Для примера давайте посмотрим на этот пример:

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

что я явно не хочу.

Вопрос в том, как избежать таких совпадений?

0

Решение

Проблема в том, что ваш RE:

(.*)

Говорит, чтобы захватить все. . * Известен как жадный и захватит все, что может.
Есть два решения для этого.

Один:

(.*?)

Нежадная операция. *

Два:

([^<]*)

Просто сопоставьте все, что не является < персонаж. Это быстрее чем. *?

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]