【问题标题】:Strip out ad from html string从 html 字符串中去除广告
【发布时间】:2009-03-11 19:29:02
【问题描述】:

我有一个包含 html 字符串的变量。这个字符串有这个特定的代码

<a href="http://www.pheedo.com/click.phdo?s=xxxxxxxx&amp;p=1"><img border="0" src="http://www.pheedo.com/img.phdo?s=xxxxxxxxxx&amp;p=1" style="border: 0pt none ;" alt=""/></a>

使用正则表达式,我怎样才能删除它。基本上是在寻找 pheedo.com 域名,然后去掉链接和图片标签。

谢谢

【问题讨论】:

  • 我不确定您尝试提取字符串的哪一部分。 “www.foobar.com”?
  • 当域匹配 pheedo.com 时,他正在提取锚标签和子图像标签。

标签: php regex


【解决方案1】:

这是一个反答案:不要使用正则表达式操作任意 HTML! HTML 是一个非常复杂的规范,正确解析它可能是一场噩梦。

使用像phpQuery 或内置的DOMDocument 这样的库,他们知道如何为您处理HTML 的所有奇怪之处。

【讨论】:

    【解决方案2】:

    对于更通用的方法,(文本/html 广告、同一域上的不同网址等...)您可以尝试

    <a.*href="[^"]*pheedo.com[^"]*".*</a>
    

    只需替换您找到的任何匹配项。请记住,如果有一个孩子&lt;a/&gt;,你就会遇到问题。

    【讨论】:

      【解决方案3】:

      这应该与标签匹配(用 PHP 编写):

      $regex = "#<a href=\"http:\/\/www\.pheedo\.com[^>]+><img[^>]+><\/a>#"
      

      【讨论】:

      • 正则表达式中无需转义引号或正斜杠。这始终是宿主语言的要求,在没有正确上下文的情况下不应包含在内。
      • 谢谢,这很好用。这与 PHP 配合得很好,我应该说,这就是我所追求的。
      【解决方案4】:
          $text = '<a href="http://www.pheedo.com/click.phdo?s=xxxxxxxx&amp;p=1"><img border="0" src="http://www.pheedo.com/img.phdo?s=xxxxxxxxxx&amp;p=1" style="border: 0pt none ;" alt=""/></a>';
          $reg = "/href=\"(http:\/\/\S+?)\"/i";
          preg_match_all($reg, $text, $matches, PREG_PATTERN_ORDER);
      
          // $matches[1] should now hold all the domain name "www.pheeedo.com"
      

      我这样做是为了你可以将一个页面传递给 preg 并在一个数组中获取所有匹配的结果.../

      如果你有兴趣,我做了一些类似的东西来制作这个图像搜索工具。

      http://www.iansimpsonarchitects.com/fraser

      您可以通过页面上的链接查看完整的 PHP 源代码。

      F.

      【讨论】:

        猜你喜欢
        • 2014-11-16
        • 1970-01-01
        • 2010-10-19
        • 1970-01-01
        • 1970-01-01
        • 2012-06-06
        相关资源
        最近更新 更多