正则表达式相当于XOR

时间:2018-11-05 23:39:15

标签: regex xor

我正在尝试提出一个正则表达式,该表达式可以接受以下组合的任何值,除非不存在任何值。类似于XOR,如果不存在NONE,则将不接受任何其他操作,反之亦然。

到目前为止,这是我所拥有的...但是它并没有真正实现NONE的互斥性:

(NONE)|((FOO | BAR | SPAM)(?\ |?(FOO | BAR | SPAM))*)

有什么建议吗?

谢谢!

1 个答案:

答案 0 :(得分:2)

您可以使用此正则表达式:

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

它以negative look ahead开头:任意数量的任何字符,后跟'NONE'

如果该测试失败(找不到),那么匹配将失败。如果没有找到'NONE',它会继续运行并匹配:从字符串的开头开始,任意数量的任何字符,后跟任意一个单词。重复这一部分。

Edit单独允许NONE:

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

现在,首先检查“ NONE”是否单独存在(可以)。