正则表达式以某种方式结合了 AND 操作数、NOT 操作数和捕获组

Regex somehow combining AND-operand, NOT-operand, and capture group

我知道您可以通过以下方式在正则表达式中使用非操作数:

但是是否可以将其中任何一个与 AND 和捕获组匹配一起使用?如:

我知道在正则表达式中并没有真正的 AND 操作数,这是另一个应该同时修复的问题..

请注意,上面这只是一个例子,在我的正则表达式中 AB 有点长,捕获组不在它旁边。我只是在这个问题中隔离了问题部分。

代码

See regex in use here

([AB])(?!)[AB]

在某些正则表达式引擎中,您可以略微通过使用以下(使用递归)来简化它 - Java 不允许递归,因此此方法不适用可能在 Java.

See regex in use here

([AB])(?!)(?1)

说明

  • ([AB]) 捕获集合中的一个字符 AB 到捕获组 1
  • (?!) 负前瞻确保后面的内容与捕获组 1 最近捕获的文本不匹配
  • [AB] 匹配集合中的一个字符 AB

试试这个正则表达式:

^(?!([AB]))[AB]+$

Click for Demo

解释:

  • ^ - 断言字符串的开头
  • (?!([AB])) - 否定前瞻验证 A 后面没有另一个 AB 后面没有另一个 B
  • [AB]+ - 匹配出现 1 次以上的 AB
  • $ - 断言字符串结束