正则表达式相当于异或

标签 regex xor

我试图想出一个正则表达式,它可以接受下面组合的任何值,除非不存在。类似于 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/

相关文章:

正则表达式拉出 2 个下划线之间的字符串

Python正则表达式查找两个子字符串之间的所有字符串

c++ - 为什么 C/C++ 中没有 ^^ 运算符?

php - XOR PHP 中的一个字符串,键是一个整数

java - 按位异或 java long

java - 如何在Java中的字符串分词器中否定分隔符字符串中的正则表达式

ios - NSRegularExpression

iphone - RegexKitLite 不匹配方括号

c - C异或可执行文件加密/解密的问题

algorithm - n 个不同数字的异或总是 n 个数字集合之外的数字吗?