假设我的内容中有两个链接。如何找到包含$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>
原样。
答案 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);