我正在尝试提出一个正则表达式,该表达式可以接受以下组合的任何值,除非不存在任何值。类似于XOR,如果不存在NONE,则将不接受任何其他操作,反之亦然。
到目前为止,这是我所拥有的...但是它并没有真正实现NONE的互斥性:
(NONE)|((FOO | BAR | SPAM)(?\ |?(FOO | BAR | SPAM))*)
有什么建议吗?
谢谢!
答案 0 :(得分:2)
您可以使用此正则表达式:
^(?!.*NONE)(?:.*(FOO|BAR|SPAM))*
它以negative look ahead
开头:任意数量的任何字符,后跟'NONE'
。
如果该测试失败(找不到),那么匹配将失败。如果没有找到'NONE'
,它会继续运行并匹配:从字符串的开头开始,任意数量的任何字符,后跟任意一个单词。重复这一部分。
Edit
单独允许NONE:
^NONE$|^(?!.*NONE)(?:.*(FOO|BAR|SPAM))*
现在,首先检查“ NONE”是否单独存在(可以)。