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

时间:2017-11-23 16:16:44

标签: java regex match regex-group

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

  • [^AB]:匹配"A""B"
  • 以外的任何内容
  • A(?!B):匹配"A",而不是"B"
  • (?<!A)B):匹配"B"前面没有"A"

但是可以使用AND和捕获组匹配中的任何一个吗?如:

  • 非工作伪代码([AB])([AB]&&[^\\1]):匹配"AB""BA"(但不是"AA""BB"

我知道正则表达式中没有真正的AND操作数,这是另一个应该同时修复的事情。

请注意,以上只是一个示例,在我的正则表达式中AB稍微长一点,捕获组不在其旁边。我刚刚在这个问题中找到了问题部分。

2 个答案:

答案 0 :(得分:2)

试试这个正则表达式:

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

Click for Demo

<强>解释

  • ^ - 断言字符串的开头
  • (?!([AB])\1) - 用于验证A未被其他AB跟踪的负面预测未被另一个B
  • 跟踪
  • [AB]+ - 匹配AB
  • 的1次出现
  • $ - 断言字符串的结尾

答案 1 :(得分:1)

代码

See regex in use here

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

在某些正则表达式引擎中,您可以稍微通过使用以下(使用的递归)来简化此操作 - Java不允许递归,因此Java中无法使用此方法。

See regex in use here

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

说明

  • ([AB])将集合AB中的字符捕获到捕获组1
  • (?!\1)否定前瞻确保后续内容与捕获组1最近捕获的文本不匹配
  • [AB]匹配集AB
  • 中的字符