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*) |
你的正则表达式是零长度的正则表达式。试试这个:
演示