正则表达式否定预测 - 排除确切的单词

时间:2015-11-03 08:54:21

标签: regex negative-lookahead

我需要修改一个标识符,它有一个特定的第一个字母,以及零个或多个连续字母,我想排除一些保留字。 对于示例,我使用相同的第一个和继续字母:

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

所以抽象| alignof | as | impl | in | let | mut是我不想匹配的词,事实是,这个正则表达式我不能匹配单词" letter"因为"让"。它只匹配" etter"

我也试过这个:

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

但它似乎不起作用。 如何排除确切的单词?

由于

1 个答案:

答案 0 :(得分: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