等价于 XOR 的正则表达式

Regex equivalent to XOR

我正在尝试提出一个正则表达式,它可以接受以下任何值的组合,但存在 NONE 时除外。类似于 XOR 的东西,如果 NONE 存在,则不会接受其他任何东西,反之亦然。

这是我目前所拥有的...但它并没有真正强制执行 NONE:

的互斥性

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

有什么建议吗?

谢谢!

您可以使用这个正则表达式:

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

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

如果此测试失败(找到 NONE),则匹配将失败。如果未找到 'NONE',它将继续并匹配:从字符串的开头开始,任意数量的任意字符后跟您的任意单词。这部分重复了。

Edit 允许 NONE 本身:

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

现在开始检查 'NONE' 是否单独(没关系)。