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

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

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

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

例如,我想要除了 tomato 或 potato 之外的任何词,我的正则表达式目前为止:

^(?!(Potato|Tomato))

我正在测试我的正则表达式 here。 当我输入 Potato 我得到:

Your pattern does not match the subject string.

这是我期望的结果,但是每当我输入除番茄和土豆以外的任何其他内容时,例如 "chocolate" 我得到:

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.

我试着把我的表情改成:

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

意思是,我想要除单词 "Tomato" 和 "Potato" 之外的任何字母数字字符组合,但我得到了相同的结果。

我不知道如何更改我的正则表达式,所以它有一个 捕获组 符合我的需要。

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

Demo

您正在使用的正则表达式

^(?!(Potato|Tomato))

这个正则表达式的意思是"match the zero length string at the start which is not followed by 'Potato' or 'Tomato'"

您正在使用的正则表达式是负前瞻。参考:here 此外,它不会捕获任何内容,因为此正则表达式中唯一的捕获组只能匹配您不允许的 "Potato" 或 "Tomato"。

捕获组由圆括号定义,但如果有“?”在左圆括号前面,不作为捕获组。

如果你想在上面的正则表达式中有一个捕获组,使用这个:

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

现在,如果您针对字符串 "bracket" 测试此正则表达式,您将在 [0-0] 处获得长度为 0 的匹配项。

您要查找的正则表达式是:

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