我需要一个正则表达式来匹配不在我所拥有的特定列表中的单词。
这是我尚未制作的系统,但我需要用于过滤。显然它根据给定的正则表达式过滤字段,字段只包含一个单词。所以我想要全字匹配。
例如,我想要番茄或土豆以外的任何词,到目前为止我的正则表达式:
^(?!(Potato|Tomato))
我正在测试我的正则表达式here。 当我输入马铃薯时,我得到:
您的模式与主题字符串不匹配。
这是我期望的结果,但每当我输入除番茄和马铃薯之外的任何其他东西,例如"巧克力"我明白了:
没有提取匹配组。
这意味着您的模式匹配但没有(捕获 (groups))匹配主题字符串中的任何内容。
我尝试将表达式更改为:
([[:alnum:]])*^(?!(Potato|Tomato))
意思是,除了单词" Tomato"之外,我想要任何字母数字字符组合。和"马铃薯",但我得到了相同的结果。
我不知道如何更改我的正则表达式,因此它有一个符合我需要的捕获组。
答案 0 :(得分:4)
您正在使用的正则表达式
^(?!(Potato|Tomato))
这个正则表达式意味着“匹配开头的零长度字符串,后面没有'Potato'或'Tomato'”
你正在使用的正则表达式是一个负向前瞻。参考:here 此外它没有捕获任何东西,因为这个正则表达式中唯一的捕获组只能匹配你不允许的“马铃薯”或“番茄”。
捕获组由圆括号定义但是如果有“?”在左圆括号前面,它不被视为捕获组。
如果你想在上面的正则表达式中有一个捕获组,请使用:
^((?!(Potato|Tomato)))
现在,如果您针对字符串“bracket”测试此正则表达式,您将在[0-0]处获得0长度匹配。
您正在寻找的正则表达式是:
^(?!(Potato|Tomato)$)(\w*)
答案 1 :(得分:1)
你的正则表达式是一个零长度的正则表达式。试试这个:^(?!(Potato|Tomato))\w*
。这将与巧克力相匹配。如果您想捕获巧克力,请执行以下操作:^(?!(Potato|Tomato))(\w*)