使用preg_replace删除网址

时间:2014-04-11 05:33:57

标签: php regex html-parsing preg-replace

我想删除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>

如果在clickansave.net中找到href,我想删除上面显示的所有内容。我需要一个使用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);

2 个答案:

答案 0 :(得分: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网址的要求。请使用此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.

答案 1 :(得分:0)

假设这是您的字符串,其中包含指向包含域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将包含锚点(<a ..)标记之间的图像或文字。

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

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