【问题标题】:Removing urls with preg_replace使用 preg_replace 删除 url
【发布时间】:2014-05-25 02:49:50
【问题描述】:

我想删除php中的超链接

这里是html

<a rel="nofollow" href="http://www.clickansave.net/download/somethingelse" title="Download Now" target="_blank"><img src="http://banners.coolmirage.com/download_bt3.png" border="0" alt="Download"></a>

如果在href 中找到clickansave.net,我想删除上面显示的所有内容。出于以下原因,我需要一个使用 preg_replace 而不是 dom 的解决方案:

我知道要删除的 html 的确切结构,并且页面上只有一次出现。在这种情况下,Dom 将是矫枉过正

我尝试了以下

首先我删除了

$input = preg_replace('#<img src="http://banners.coolmirage.com/download_bt3.png" border="0" alt="Download"><\/a>#s', '' , $input,1);

从那里我想到了这个当然不起作用的正则表达式

$input = preg_replace('#<a.*?<img src="http://banners.coolmirage.com/download_bt3.png" border="0" alt="Download"><\/a>#s', '' , $input,1);

【问题讨论】:

  • 在什么方面矫枉过正?你能用 DOM 来实现它吗?
  • 你试过什么?您似乎只是在要求某人为您编写代码。
  • @Devon 我刚刚添加了我在上面尝试过的内容
  • img 标签在你所谓的正则表达式中做了什么?
  • @zerkms 我想删除我发布的整个 html,而不仅仅是 href

标签: php regex html-parsing preg-replace


【解决方案1】:

这样的事情呢?

$string = 'This is a string <a rel="nofollow" href="http://www.clickansave.net/download/somethingelse" title="Download Now" target="_blank"><img src="http://banners.coolmirage.com/download_bt3.png" border="0" alt="Download"></a> of text.  There are <A HREF="http://www.google.com">Lots Of Links</A> to find and replace.';

$string = preg_replace('~<a.*?</a>~i', 'NO_LINK_HERE', $string);

print $string;

这将输出以下内容:

This is a string NO_LINK_HERE of text. There are NO_LINK_HERE to find and replace.

编辑:

抱歉,我没有注意到只替换 clickansave.net URLS 的要求。请改用此preg_replace 来执行此操作。

$string = preg_replace('~<a.*?clickansave\.net.*?</a>~i', 'NO_LINK_HERE', $string);

print $string;

这会给你这个输出:

This is a string NO_LINK_HERE of text.  There are <A HREF="http://www.google.com">Lots Of Links</A> to find and replace.

【讨论】:

    【解决方案2】:

    假设这是您的字符串,其中包含指向包含域 example.net 的图像或文本的超链接,

    $string = '<a href="http://www.example.net/download/somethingelse" title="Download Now" target="_blank"><img src="http://banners.coolmirage.com/download_bt3.png" border="0" alt="Download"></a>';
    

    如果您想删除包含 example.net 的超链接,请使用

    $pattern = '~(<a href="[^"]*example.net[^"]*" [^>]*>)\s*(.+)\s*(</a>)$~';
    //                          1                             2       3
    
    $result = preg_replace($pattern, '$2', $string);
    

    现在$result 将在锚 (&lt;a ..) 标记之间包含图像或文本。

    如果要删除任何超链接,请使用

    $pattern = '~(<a href="[^"]*" [^>]*>)\s*(.+)\s*(</a>)$~';
    

    【讨论】:

    • 我想删除我发布的整个 html,而不仅仅是超链接
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-10
    • 2013-03-24
    • 1970-01-01
    • 1970-01-01
    • 2015-03-03
    • 1970-01-01
    相关资源
    最近更新 更多