2014-11-20 2 views
0

Ради пример в давайте посмотрим на этот пример:Как игнорировать различные комбинации в 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

Использовать HTML-парсер. Regexes не подходят для анализа HTML. – ThiefMaster

+0

Используйте [DOM] (http://php.net/dom) –

ответ

2

Проблема заключается в том, что ваш RE:

(.*) 

Говорит, чтобы захватить все. . * Известен как жадный и будет хватать все, что он может.
Существует два решения.

Один:.

(.*?) 

нежадной работа *

Два:

([^<]*) 

Просто подберите что-нибудь, что не является < характера. Это быстрее, чем. *?

+0

Не мог бы лучше сказать это. – philtune

+0

Отлично, решил проблему. Спасибо. –

Смежные вопросы