я имею:
<a href="http://www.test.com/performers/test-1/" title="">test 1</a> <a href="http://www.test.com/performers/test-2/" title="">test 2</a>
Я хотел бы, чтобы заголовок 1, заголовок 2 как результат.
Я написал:
$m=array();
preg_match_all('/<a href="http:\/\/www.test.com\/performers\/(.*)\/" title="">(.*)<\/a>/i', $buff,$m);
$info['models'] = implode(',', $m[2]);
В результате я получаю только титул 2.
Но если HTML-коды title 1 и title 2 не совпадают, я получаю title 1, title 2.
Как получить заголовок 1, заголовок 2 как результат, когда весь HTML-код находится в одной строке?
Спасибо.
Проблема в жадности регулярных выражений. (.)*
участие в ваших матчах регулярных выражений test-1/" title="">test 1</a> <a href="http://www.test.com/performers/test-2
вместо только test-1
, Если вы добавите модификатор U
к вашему шаблону ваше регулярное выражение работает. Но вы должны экранировать еще несколько символов в вашем регулярном выражении, то есть все точки соответствуют любому символу, а не только точке:
$m = array();
preg_match_all('/<a\ href="http:\/\/www\.test\.com\/performers\/(.*)\/"\ title="">(.*)<\/a>/Ui', $buff,$m);
$info['models'] = implode(',', $m[2]);
И, честно говоря, работать над DOM здесь намного безопаснее.
Других решений пока нет …