2

我在这里(以及更多网站)查看了许多问题,并提供了一些提示,但没有一个给我明确的答案。我知道正则表达式,但我远非大师。这个特定的问题涉及 PHP 中的正则表达式。

我需要在文本中找到未被给定类的超链接包围的单词。例如,我可能有

This <a href="blabblah" class="no_check">elephant</a> is green and this elephant is blue while this <a href="blahblah">elephant</a> is red.

我需要匹配第二只和第三只大象而不是第一只(由测试类“no_check”标识)。请注意,超链接中的属性可能不仅仅是 href 和 class。我想出了

((?<!<a .*class="no_check".*>)\belephant\b)

它在正则表达式测试软件中运行良好,但在 PHP 中却不行。

任何帮助是极大的赞赏。如果您不能提供正则表达式,但可以找到某种 PHP 代码逻辑来规避对它的需求,我将同样感激。

4

3 回答 3

1

我最终使用了混合解决方案。事实证明,我必须解析特定关键字的文本并检查它们是否已经是链接的一部分,如果不是,则将它们添加到超链接中。这里提供的解决方案非常有趣,但没有完全满足我的需要。

不过,使用 HTML 解析器的想法很好,我目前正在另一个项目中使用它。因此,向 Alan Moore 和 Eric Strom 致敬,感谢他们提出了该解决方案。

于 2010-05-06T15:53:28.750 回答
1

如果可变宽度的负后瞻不可用,一个快速而肮脏的解决方案是反转内存中的字符串并使用可变宽度的负前瞻来代替。然后再次反转字符串。

但是使用 HTML 解析器可能会更好。

于 2010-04-27T21:50:44.113 回答
1

我认为最简单的方法是匹配具有“ no_check ”属性的完整<a>元素您正在搜索的单词。例如:

<a [^<>]*class="no_check"[^<>]*>.*?</a>|(\belephant\b)

如果是您匹配的单词,它将在捕获组 #1 中;如果不是,则该组应为空或 null。

当然,我所说的“最简单的方法”实际上是指最简单的正则表达式方法。更简单的是使用 HTML 解析器。

于 2010-04-27T23:35:09.663 回答