关于正则表达式:与单词列表不匹配的单词的正则表达式

Regular expression for word that doesn't match a list of words

我需要一个正则表达式来匹配不在我所拥有的特定列表中的单词。

这是一个我还没有建立的系统,但我需要使用过滤。显然,它根据给定的正则表达式过滤字段,字段只包含一个单词。所以我要全词匹配。

例如,我想要的不是西红柿或土豆,我的ReXEX到目前为止:

1
^(?!(Potato|Tomato))

我在这里测试正则表达式。当我输入土豆时,我得到:

Your pattern does not match the subject string.

这是我所期望的结果,但是每当我输入除番茄和土豆以外的任何东西,比如"巧克力",我都会得到:

No match groups were extracted.

This means that your pattern matches but there were no (capturing
(groups)) in it that matched anything in the subject string.

我试着把我的表情改成:

1
([[:alnum:]])*^(?!(Potato|Tomato))

意思是,我想要字母数字字符的任何组合,除了单词"番茄"和"土豆",但是我得到了相同的结果。

我不知道如何改变我的regex,所以它有一个捕获组,匹配我需要的。


您正在使用的正则表达式

1
^(?!(Potato|Tomato))

这个正则表达式的意思是"匹配开头的零长度字符串,后面不跟‘土豆’或‘番茄’"。

您使用的regex是一个否定的lookahead。裁判:这里此外,它不会捕获任何东西,因为这个regex中唯一的捕获组只能匹配您不允许的"土豆"或"番茄"。

捕获组由圆括号定义,但如果有"?"在左圆括号前面,它不被视为捕获组。

如果要在上面的regex中有一个捕获组,请使用以下命令:

1
^((?!(Potato|Tomato)))

现在,如果您用字符串"bracket"测试这个regex,您将在[0-0]处得到一个0长度的匹配。

您要查找的regex是:

1
^(?!(Potato|Tomato)$)(\w*)

你的正则表达式是零长度的正则表达式。试试这个:^(?!(Potato|Tomato))\w*。和巧克力相配。如果你想捕获巧克力,那么就这样做:^(?!(Potato|Tomato))(\w*)

演示