gpt4 book ai didi

php - 正则表达式匹配字符串中的单词或短语,但不匹配 URL 的一部分或 标签内。 (php)

转载 作者:太空宇宙 更新时间:2023-11-04 13:31:34 28 4
gpt4 key购买 nike

我知道正则表达式不适合与 HTML 字符串一起使用,我已经查看了 PHP Simple HTML DOM Parser,但仍然相信这是可行的方法。所有 HTML 标签都将由我的论坛软件生成,因此它们将是一致且有效的 HTML。

我想做的是制作一个插件,它将在 HTML 字符串中找到关键字(或短语)列表,并将它们替换为我指定的链接。例如,如果有人键入:

I use Amazon for that.

它将替换为:

I use <a href="http://www.amazon.com">Amazon</a> for that.

问题当然是,如果 URL 中有“amazon”,它也会被替换。我用这个网站上的回调函数解决了这个问题,稍作修改。

但现在我还有一个问题,它仍然会替换开始和结束标签之间的单词。

<a href="http://www.amazon.com">My Amazon Link</a>

它将匹配“我的亚马逊链接”中的“亚马逊”

我真正需要的是一个正则表达式来匹配除了 <a href 之外的任何地方说“amazon”和 </a>

有什么想法吗?

最佳答案

当然最好使用 DOM。

但是,您可能会逃过一劫:

$result = preg_replace('%Amazon(?![^<]*</a>)%i', '<a href="http://www.amazon.com">Amazon</a>', $subject);

匹配Amazon只有当

  1. 它后面没有结束语 </a>标记,
  2. 它本身不是标签的一部分,
  3. 没有中间标签,i。 e.如果标签可以嵌套在 <a> 中,它将被丢弃标签。

因此它将改变这一点:

I use Amazon for that.
I use <a href="http://www.amazon.com">Amazon</a> for that.
<a href="http://www.amazon.com">My Amazon Link</a>
It will match the "Amazon" in "My Amazon Link"

进入这个:

I use <a href="http://www.amazon.com">Amazon</a> for that.
I use <a href="http://www.amazon.com">Amazon</a> for that.
<a href="http://www.amazon.com">My Amazon Link</a>
It will match the "<a href="http://www.amazon.com">Amazon</a>" in "My <a href="http://www.amazon.com">Amazon</a> Link"

关于php - 正则表达式匹配字符串中的单词或短语,但不匹配 URL 的一部分或 <a> </a> 标签内。 (php),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6009415/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com