首页 > 解决方案 > 正则表达式匹配一个非常具体的模式

问题描述

我一直在尝试创建一个可以接受由 | 分隔的任何值(SPAM、FOO、BAR)的正则表达式。或无。我一直在研究的正则表达式可以完成这项工作,但是当在这些值之前输入一个值时会出现问题(有关更多详细信息,请参见下图)。有什么建议么?谢谢!

^NONE$|^(?!. NONE)(?:. (FOO|BAR|SPAM))*

这就是我目前正在使用的。

应该通过的字符串:

//应该通过

FOO|酒吧|垃圾邮件

食品

垃圾邮件|酒吧

垃圾邮件|FOO

垃圾邮件|FOO|酒吧

酒吧|餐饮

没有任何

//应该失败

无|FO

FOO|垃圾邮件|无

FOO|NONE|BAR ​ FOO|TEST

FOO_TEST

测试

FOO|测试|酒吧

FOO_TEST|酒吧

​ 测试|FO

测试|食品|酒吧

测试 FOO|BAR

TEST_FOO|酒吧

​ *TEST 被用作不在组中的单词

在此处输入图像描述

标签: regex

解决方案


这应该有效:^NONE$|^(FOO|BAR|SPAM)([|](FOO|BAR|SPAM))*$


推荐阅读