如何用PHP中的正则表达式替换特定标签?

时间:2016-11-28 06:12:08

标签: php preg-replace

假设我的内容中有两个链接。如何找到包含$string的特定链接,并仅替换为单词。

$string = 'dog';
$content = 'a quick brown <a href="some-link"> fox</a> jumps over a lazy <a href="another-link"> dog</a>';
$new_content =  preg_replace('<a.+href="(.*)".*> '.$string.'</a>', $string, $content);

我尝试使用'~<a.+href="(.*)".*> '.$string.'</a>~',但它也删除了这些锚点之间的所有内容。

什么错了?

更新

仅将<a href="another-link"> dog</a>替换为dog并保留<a href="some-link"> fox</a>原样。

2 个答案:

答案 0 :(得分:3)

Try this to replace the anchor text to given string with preg_replace,

$string = 'dog';
$content = 'a quick brown <a href="some-link"> fox</a> jumps over a lazy <a href="another-link"> dog</a>';

echo preg_replace('/<a(.+?)>.+?<\/a>/i',"<a$1>".$string."</a>",$content);

答案 1 :(得分:1)

只需使用延迟量词,即?,并为正则表达式添加分隔符:

$string = 'dog';
$content = 'a quick brown <a href="some-link"> fox</a> jumps over a lazy <a href="another-link"> dog</a>';
$new_content =  preg_replace('~<a.+?href="(.*?)".*> '.$string.'</a>~', $string, $content);
//                         here ___^  and  __^

你也可以减少到:

$new_content =  preg_replace("~<a[^>]+>\s*$string\s*</a>~", $string, $content);