匹配除列出的每个单词

时间:2013-01-30 16:11:16

标签: regex perl word match

我的问题是,如果一个字符串包含除了我列出的单词之外的任何单词,我需要匹配。

例如,我可能有这个批准的列表:

User1
User2

以下是两个应该匹配和不应该匹配的示例。

应匹配(因为User3未获批准):

User1
User2
User3

不匹配(因为列出的每个字符串都在批准的列表中):

User1

我尝试了外观断言,但实际上它们并没有在尝试匹配时使用字母,所以使用"User1\r\nUser2"之类的字符串,我会得到"ser1\r\n"之类的匹配项。除了我认为允许之外,我想知道是否还有其他任何词语。

我不能用编程语言来做这件事;我只被允许将正则表达式交给程序。语言将是Perl。

3 个答案:

答案 0 :(得分:5)

/\b((?!(User1\b|User2\b)).+?)\b/能做你想要的吗?

\b表示单词中断,即单词和非单词字符(零宽度)之间的间隙。

?!表示负前瞻断言(也是零宽度)。

.+?用于捕捉与排除的单词不匹配的任何内容。

希望这有帮助。

答案 1 :(得分:2)

\b(?!(User1|User2))\w+\b

这应匹配“|”中未列出的任何字词分隔列表

答案 2 :(得分:0)

/\b(?!User[12]\b)\w+/

将匹配a-zA-Z0-9_User1以外的任何字词(包含User2的字符串)。