PHP从新行中的超文本字符串中删除html链接标记

时间:2015-02-15 23:32:10

标签: php regex

我有以下字符串:

$linkString="The Following is a link to google <a class='links' href='http://google.com'>

http://google.com
</a>
";

在此字符串中,新行中的html链接的超文本。我想删除并可能从字符串中替换所有链接(其html标记和超文本),所以我尝试了以下内容:

<?php
$linkString="The Following is a link to google <a class='links' href='http://google.com'>

http://google.com
</a>
";

//Remove link tag:

echo preg_replace('/<[^>]*>/','',$linkString);

但是,上面的例子打印出来:

The Following is a link to google 

http://google.com

这是一个在线演示:http://codepad.org/whw81bwa

我想知道能够删除所有链接(标记和超文本)的正则表达式

2 个答案:

答案 0 :(得分:2)

不要使用正则表达式,而是有效地使用DOM为您执行此操作。

$doc = new DOMDocument;
@$doc->loadHTML($html); // load the HTML data

$xpath = new DOMXPath($doc);  

foreach ($xpath->query('//a') as $tag) {
   $tag->parentNode->removeChild($tag);
}

echo $doc->saveHTML();

答案 1 :(得分:0)

以下正则表达式解决了这个问题:

/(?i)<a([^>]+)>(.+?)<\/a>/'

所以,

<?php
$linkString="The Following is a link to google <a class='links' href='http://google.com'>

http://google.com
</a>
";

//Remove link tag:

echo preg_replace('/(?i)<a([^>]+)>(.+?)<\/a>/','A Hidden Link',$linkString);
相关问题