等价于 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' 是否单独(没关系)。
我正在尝试提出一个正则表达式,它可以接受以下任何值的组合,但存在 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' 是否单独(没关系)。