正则表达式匹配单词不在另一个单词的特定数量的单词内

时间:2010-10-26 15:27:50

标签: regex

希望我能解释一下。

我有一个正则表达式,用于匹配彼此靠近的两个单词。例如,如果我想在彼此的5个单词中找到“account”和“number”这个词:

\ baccount \ W +(?:\ W + \ W +){1,6}数\ B'/ P>

这很有效。

现在我需要找到一种搜索单词的方法,只要它不在另一个单词的2个单词之内。

例如,我需要一个匹配“Butthead”的正则表达式,但只有当“Beavis”不在2个单词之内时,无论是在Butthead之前还是之后。

所以Butthead和Beavis不匹配。 Beavis和Butthead不匹配。但Beavis肯定是一个巨大的Butthead会匹配,因为Beavis和Butthead不在2个字以内。

3 个答案:

答案 0 :(得分:1)

如果你的正则表达式系统支持可变长度负面外观,这应该有效。 我不认为许多正则表达式引擎支持这一点。我知道perl和php还不支持这个。我无法测试,因为我使用perl和php进行正则表达式测试。

/(小于比维斯(?:!?\ S + \ W +)\ S +)布特海德(?!?(:\ S + \ W +)BEAVIS)/

答案 1 :(得分:0)

你不能只做两场比赛吗?匹配以找到任何地方(简单)出现的单词然后丢弃该匹配,如果该单词不在另一个单词附近(你已经有了解决方案)。

答案 2 :(得分:0)

((((\布特海德\ W +(:\ W + \ W +){1,2}比维斯\ B)|(\比维斯\ W +(:?!???\ W + \ W +){1,2} ?布特海德\ b)中))。)*

也许是这样的......虽然没有试过...... 基本上我已经尝试使用以下逻辑: NOT((包含Butthead 2个字Beavis)或(包含Beavis 2个字Butthead))