preg_match_all不起作用

时间:2011-04-22 10:48:58

标签: php preg-match-all

preg_match_all('/<img(.*)width="9" height="9" alt="(.*)" title="" />/' , $html , $sources );
foreach($sources[1] as $alt){
echo $alt."<br\>";
}

我想列出所有图片中与html页面匹配的所有alt标签值 怎么了?

我想使用正则表达式而不是dom。

4 个答案:

答案 0 :(得分:0)

consult the php documentation进行正确的preg_match_all来电。你需要提供正则表达式分隔符!

此外,您的问题描述不是非常具体,所以如果您需要更多帮助,则需要重写您的问题。

答案 1 :(得分:0)

你需要转义img标签的/:

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

否则,它被视为您的refex的结束。

答案 2 :(得分:0)

好吧,不知道确切的html源代码,很难说。但是有很多问题,这也是为什么新手不应该为此目的使用正则表达式的一个很好的例子:

  • 如果HTML属性以这种非常特殊的顺序出现,它将只匹配。
  • 如果要在源中切换alt =和title =标签,它将会失败。
  • 如果代码不以冗余/>结尾,则也不匹配。
  • 如果属性之间总是只有一个空格,它只能检测源中的字符串。如果您的HTML源代码中有换行符,或者某个地方有两个空格,那么......(请参阅\s*
  • (.*)在任何情况下都应为(.*?)。但是,最好使用[^>]+[^"]+进行此项使用。
  • #e eval标志在preg_match_all中没有用。

答案 3 :(得分:0)

你只是顽固,使用PHP Simple HTML DOM Parser或类似内容来解析HTML。

例如:

// Create DOM from URL or file
include('simple_html_dom.php');
$html = file_get_html('http://www.scroogle.org/');

    // Find all images
    foreach($html->find('img') as $element)
           echo $element->src . '<br>';
           echo $element->alt. '<br>';