我知道您可以通过以下方式在正则表达式中使用NOT操作数:
[^AB]
:匹配"A"
或"B"
A(?!B)
:匹配"A"
,而不是"B"
(?<!A)B)
:匹配"B"
前面没有"A"
但是可以使用AND和捕获组匹配中的任何一个吗?如:
([AB])([AB]&&[^\\1])
:匹配"AB"
或"BA"
(但不是"AA"
或"BB"
)我知道正则表达式中没有真正的AND操作数,这是另一个应该同时修复的事情。
请注意,以上只是一个示例,在我的正则表达式中AB
稍微长一点,捕获组不在其旁边。我刚刚在这个问题中找到了问题部分。
答案 0 :(得分:2)
试试这个正则表达式:
^(?!([AB])\1)[AB]+$
<强>解释强>
^
- 断言字符串的开头(?!([AB])\1)
- 用于验证A
未被其他A
或B
跟踪的负面预测未被另一个B
[AB]+
- 匹配A
或B
$
- 断言字符串的结尾答案 1 :(得分:1)
([AB])(?!\1)[AB]
在某些正则表达式引擎中,您可以稍微通过使用以下(使用的递归)来简化此操作 - Java不允许递归,因此Java中无法使用此方法。
([AB])(?!\1)(?1)
([AB])
将集合AB
中的字符捕获到捕获组1 (?!\1)
否定前瞻确保后续内容与捕获组1最近捕获的文本不匹配[AB]
匹配集AB