2015-11-03 48 views
1

我需要修改一个标识符,它有一定的第一个字母,零个或多个连续字母,我想排除一些保留字。 对于这个例子我使用的是相同的第一,并继续字母:正则表达式否定预测 - 排除确切单词

(?!(abstract|alignof|as|impl|in|let|mut))[a-z][a-z]* 

如此抽象| alignof |为| IMPL |中|让| MUT是我不想匹配的话,事情是,这个正则表达式因为“let”而不能匹配“letter”这个词。它仅匹配“埃特”

我也试过这样:

(?!(abstract|alignof|as|impl|in|let|mut))\b[a-z][a-z]*\b 

,但它似乎并没有工作。 如何排除确切的单词?

感谢

+3

加上'\ B'在先行还的话。 '(!!\ b(abstract | alignof | as | impl | in | let | mut)\ b)' – nhahtdh

+0

@nhahtdh:请发表您的答案。 –

回答

1

您需要添加单词边界检查在先行还的话:

(?!\b(abstract|alignof|as|impl|in|let|mut)\b)\b[a-z][a-z]*\b 

技术上,第一\b是多余的,因为\b是先行外检查。由于单词边界和先行断言零长度,我们可以围绕交换他们:

\b(?!(abstract|alignof|as|impl|in|let|mut)\b)[a-z][a-z]*\b 
+0

好的,那可行!谢谢! –