写这个正则表达式的更好方法是什么?否定前瞻

时间:2011-10-01 15:13:50

标签: php regex

我认为我在大多数时候都有这个工作,但是想知道是否有更好的方法来编写它:

/\b(Word)(?!.*?<\/a>)(?!.*?>)\b/

我试图在未链接时匹配Word,并且它不是HTML标记的一部分(如<a href="" title="Word">不匹配)。

据我所知,如果可能的话,最好使用否定的字符类,而不是让它变得懒惰。我试过这样做,但无法理解。我甚至不知道这是否可能,但我想我会把它扔出去。

1 个答案:

答案 0 :(得分:1)

您要查找的否定字符类是[^<>]*。这将跳过任何标签边界。

 /\b(Word) (?! [^<>]*<\/a> | [^<]*>) \b/x

请注意,如果链接中有进一步的标记,则查找</a>将允许正则表达式匹配;例如,不会跳过粗体<a>..<b>Word</b>..</a>字。 (检查这些事情需要比前瞻更多的努力。)