为了账号安全,请及时绑定邮箱和手机立即绑定

正则表达式排除被特殊字符包围的单词

正则表达式排除被特殊字符包围的单词

PHP
绝地无双 2022-10-14 10:27:59
我一直在寻找解决我遇到的正则表达式难题的问题。最近,我从事一个项目,我们需要用锚标签列表替换给定文本中的单词列表。例如,给定一个字符串This is a test string我可能想将“测试”一词替换为<a target="_blank"  href="https://website.com/string-random“>test</a>. 结果字符串应如下所示This is a <a target="_blank" href="https://website.com/string-random“>test</a> string单词的替换是循环完成的foreach ($documents as $document)
     foreach ($links as $link)        replace keywords在某些情况下最终会发生的是锚标记中的一些 url 包含可能被替换的单词例如,给定这个要替换的单词列表
[    {        'keyword': 'test',        'link': 'https://website.com/string-random'    },    {        'keyword': 'string',        'link': 'https://random.com/string'    }]完成所有替换后,我上面给出的示例字符串将如下所示
This is a <a target="_blank" href="https://website.com/<a target="_blank"  href="https://random.com/string“>string</a>-random“>test</a> <a target="_blank" href="https://random.com/string“>string</a>代替This is a <a target="_blank" href="https://website.com/string-random“>test</a> <a target="_blank" href="https://random.com/string“>string</a>目前,我正在寻找一个与特殊字符包围的任何单词都不匹配的正则表达式,因为我认为这可以解决我的问题。对于如何解决这个问题的任何其他想法也非常开放
查看完整描述

3 回答

?
斯蒂芬大帝

TA贡献1827条经验 获得超8个赞

我发现了一种对我来说效果很好的模式 $pattern = '/(?<!(>|\/|-))\b' . preg_quote($stringToReplace, '/') . '\b(?!(<|\/|-))/i';



查看完整回答
反对 回复 2022-10-14
?
SMILET

TA贡献1796条经验 获得超4个赞

这不仅仅是以前的替换:标签属性/名称/值中出现的任何单词都是一个问题。

换句话说,您想要替换一些字符后面的字符串,其中下一个 < 出现在下一个 > 之前(标签之间的字符串而不是标签内的字符串)

因此尝试这个: (string-to-match)(?=[^>]*?<)

(显然,替换字符串以匹配)

另一个块是前瞻:它确保您可以读取除 > 之外的任何字符,根据需要多次读取,然后是 <


查看完整回答
反对 回复 2022-10-14
?
慕勒3428872

TA贡献1848条经验 获得超6个赞

尝试 :


foreach ($wordlist as $word){

     $document = preg_replace("~(?! )($word[keyword])(?! )~i","<a href='$word[link]'>$1<")

}


查看完整回答
反对 回复 2022-10-14
  • 3 回答
  • 0 关注
  • 135 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号