我想删除具有特定html类的超链接并保留文本。
$string = 'My content in <a href="http://google.com" class="google">Google</a> not show, but on <a href="http://bing" class="bing">Bing</a> looks good.';
我尝试使用此代码,但删除所有超链接。我只想删除“Google”中的超链接。
$content = preg_replace( '#<a.*?>(.*?)</a>#i', '\1', $string );
我想,这样的最终结果。,
$content = 'My content in Google not show, but on <a href="http://bing" class="bing">Bing</a> looks good.';
请帮忙。谢谢。
答案 0 :(得分:2)
dotnet build
如果找到“google”,它会删除所有html标记,并保留所有其余的htlm标记。
答案 1 :(得分:0)
使用this test我在Google中添加了单词,因此它与Bing链接不匹配,因此您的代码现在将成为:
$content = preg_replace( '#<a.*?>(.*?)Google</a>#i', 'Google', $string );
它现在匹配包含文本“Google”的整个链接,并使用替换功能将其替换为文本。
答案 2 :(得分:0)
我尝试此代码有利于您的需求:
$content = preg_replace( '#<a href=".*?Google.*?".*?>(.*?)</a>#i', '\1', $string );
和输出是:
My content in Google not show, but on <a href="http://bing" class="bing">Bing</a> looks good.
答案 3 :(得分:0)
混合preg_replace(混合$ pattern,混合$替换,混合$ subject [,int $ limit = -1 [,int&amp; $ count]])(来自php.net)
如您所见,您可以对第四个参数设置限制并仅采用第一个或N($ limit)
e.g:(N = 1)
$ content = preg_replace('#(。*?)#i','\ 1',$ string,1); //仅参加第一场比赛
e.g:(N = 5)
$ content = preg_replace('#(。*?)#i','\ 1',$ string,5); //将进行前五场比赛