preg_match_all не работает - PullRequest
       5

preg_match_all не работает

0 голосов
/ 22 апреля 2011
preg_match_all('/<img(.*)width="9" height="9" alt="(.*)" title="" />/' , $html , $sources );
foreach($sources[1] as $alt){
echo $alt."<br\>";
}

Я хочу перечислить все значения тэгов alt, совпадающие со страницей html, на всем изображении, что не так?

Я хочу использовать регулярное выражение, а не dom.

Ответы [ 4 ]

0 голосов
/ 08 августа 2011

вы просто упрямый , используйте PHP Simple HTML DOM Parser или аналогичный для анализа html.

0 голосов
/ 22 апреля 2011

Вам нужно экранировать / тег img:

preg_match_all('/<img(.*)width="9" height="9" alt="(.*)" title="" \/>/' , $html , $sources );

В противном случае это считается концом вашего реферекса.

0 голосов
/ 22 апреля 2011

Ну, не зная точного источника HTML, трудно сказать.Но есть несколько проблем, и хороший пример того, почему новички не должны использовать регулярные выражения для этой цели:

  • Он будет совпадать только в том случае, если атрибуты HTML встречаются в этом особом порядке.
  • Если теги alt = и title = будут включены в источник, произойдет сбой.
  • Если тег не заканчивается избыточным />, он также не будет совпадать.
  • Он может обнаружить только строки в источнике, если между атрибутами всегда есть ровно один пробел.Если в вашем исходном HTML-коде есть разрыв строки, или где-то вкладка, или два пробела, ... (см. \s*)
  • (.*) должно быть (.*?) в любом случае.Однако предпочтительно использовать [^>]+ или [^"]+ для этого использования.
  • Флаг eval #e не используется в preg_match_all.
0 голосов
/ 22 апреля 2011

Пожалуйста, обратитесь к документации php для правильного preg_match_all вызова. Вы должны предоставить разделители регулярных выражений!

Кроме того, описание вашей проблемы не очень конкретное, поэтому, если вам нужна дополнительная помощь, вам нужно переписать свой вопрос.

...