我试图想出一个正则表达式,它可以接受下面组合的任何值,除非不存在。类似于 XOR 的东西,如果 NONE 不存在,则不会接受其他任何内容,反之亦然。
这是我到目前为止所拥有的......但它并没有真正强制执行“NONE”的相互排他性:
(无)|((FOO|BAR|SPAM)( ?\| ?(FOO|BAR|SPAM))*)
有什么建议吗?
谢谢!
最佳答案
您可以使用此正则表达式:
^(?!.*NONE)(?:.*(FOO|BAR|SPAM))*
它以否定前瞻
开始:任意数量的任意字符,后跟'NONE'
。
如果此测试失败(未找到任何内容),则匹配将失败。如果未找到 'NONE'
,它将继续并匹配:从字符串开头开始任意数量的任意字符,后跟任意单词。这部分是重复的。
编辑
以允许“NONE”本身:
^NONE$|^(?!.*NONE)(?:.*(FOO|BAR|SPAM))*
现在首先检查“NONE”是否单独存在(这是可以的)。
关于正则表达式相当于异或,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53163877/