【问题标题】:preg_match_all not workpreg_match_all 不起作用
【发布时间】:2011-04-22 10:48:58
【问题描述】:
preg_match_all('/<img(.*)width="9" height="9" alt="(.*)" title="" />/' , $html , $sources );
foreach($sources[1] as $alt){
echo $alt."<br\>";
}

我想在所有图像中列出从 html 页面匹配的所有 alt 标记值 怎么了?

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

【问题讨论】:

    标签: php preg-match-all


    【解决方案1】:

    consult the php documentation 拨打正确的preg_match_all 电话。您需要提供正则表达式分隔符!

    此外,您的问题描述不是很具体,因此如果您需要更多帮助,则需要重写您的问题发布。

    【讨论】:

    • 什么不懂?我想匹配一些宽度 = 9 和高度 = 9 的图像中的每个 alt 值
    【解决方案2】:

    你需要转义img标签的/:

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

    否则将被视为您的引用结束。

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

        【解决方案4】:

        你只是固执,使用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>';
        

        【讨论】:

          猜你喜欢
          • 2017-10-19
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-07-08
          • 2010-12-21
          相关资源
          最近更新 更多