dt2015 2018-01-25 18:59
浏览 32
已采纳

从特定文本的字符串中删除链接

I want to remove links (keeping text) from a string only if the text inside the link match exactly a term.

I'm not sure what's wrong with this regexp, but it strips out a lot of text.

$terms = ["justo pulvinar"];
$string = "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed <a href=\"#/app/292\">quam nibh, faucibus</a> quam nibh, faucibus eget tortor eget, finibus semper justo. aliquet <a href=\"#/app/212\">justo pulvinar</a>, elit.";
foreach ($terms as $term) {
    $string = preg_replace('/<a href=\"(.*?)\">('.$term.')<\/a>/', "\\2",$string);
 }
echo $string;

Edit maybe I wasn't clear enough, I have a $terms array for a reason: I want to remove from $string links that match exactly those terms, not all links.

  • 写回答

3条回答 默认 最新

  • dongyou2635 2018-01-25 19:20
    关注

    Everything looks okay except your replacement operation. This one works for me:

    $string = preg_replace('/<a [^>]*>'.$term.'<\/a>/', $term, $string)
    

    Here, we are matching an <a and all characters after it which are not > because the attributes of the a tag are not relevant for the operation. Then we want to see the term we're working on, and a closing a tag.

    Replace all of that with just the term. I'm not using backreferences because there should be no variance in the string values. A scenario where backreferences might be useful is if case were variable and needed to be preserved.

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥15 winform的chart曲线生成时有凸起
  • ¥15 msix packaging tool打包问题
  • ¥15 finalshell节点的搭建代码和那个端口代码教程
  • ¥15 用hfss做微带贴片阵列天线的时候分析设置有问题
  • ¥15 Centos / PETSc / PETGEM
  • ¥15 centos7.9 IPv6端口telnet和端口监控问题
  • ¥20 完全没有学习过GAN,看了CSDN的一篇文章,里面有代码但是完全不知道如何操作
  • ¥15 使用ue5插件narrative时如何切换关卡也保存叙事任务记录
  • ¥20 海浪数据 南海地区海况数据,波浪数据
  • ¥20 软件测试决策法疑问求解答