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

标签 php html regex preg-replace

我知道正则表达式不适合与 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/

相关文章:

javascript - 使用 jQuery 滚动固定内容

regex - Grep Perl 正则表达式和捕获组

php - 如何在sql数据库中保存很长的文本

phpinfo() 不显示 phar 启用/禁用

javascript - Yii,在提交按钮上附加一个 javascript 函数

php - 无法通过 Linux 机器上的 ODBC 连接到 informix

javascript - 我可以使用 CSS 来更改此 HTML 结构吗?

javascript - window.open 来自 CRM 2011 的 silverlight

python - 从 apache 日志中删除 2 次后获取 IP 的正则表达式

jquery - 使用 jQuery 从字符串中获取完整 URL