2011-10-01 54 views
0

我想我已经得到了这个工作的大部分,但不知道是否有更好的方式来写它:我想匹配字时,它不是挂更好的方式来写这个正则表达式?负前瞻

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

,并它不是HTML标签的一部分(如<a href="" title="Word">不应该匹配)。

从我所了解的情况来看,如果可能的话最好使用否定字符类,而不是懒惰。我试图做,但无法弄清楚。我甚至不知道这是否可能,但我想我会把它扔到那里。

+0

为什么试图修复什么不坏?如果它匹配的东西很好(你已经尝试将它匹配到一些NEAR比赛,以确保),那么我会说,只是去与它。你所要求的可以写成几十种不同的方式,并受个人喜好。 –

+0

你有没有考虑过不要试图使用正则表达式,而是实际上解析HTML,然后在没有链接元素作为父母的文本元素中查找单词? – Amber

+0

@DerrickTucker你说得很好。我对编码和一点完美主义者都很陌生,但如果它有效的话,那么也可以使用它。 –

回答

1

你正在寻找的否定字符类是[^<>]*。这将跳过任何标签边界。

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

注意寻找</a>将允许正则表达式匹配应该链接有进一步的标记在它;例如粗体字<a>..<b>Word</b>..</a>不会被跳过。 (检查这样的事情需要比预见更多的努力。)

+0

谢谢马里奥,这非常棒!并感谢关于更复杂的例子。幸运的是,我怀疑我会遇到这样的问题。 :) –