正则表达式以某种方式结合了 AND 操作数、NOT 操作数和捕获组
Regex somehow combining AND-operand, NOT-operand, and capture group
我知道您可以通过以下方式在正则表达式中使用非操作数:
[^AB]
:匹配除 "A"
或 "B"
之外的任何内容
A(?!B)
:匹配 "A"
,不跟 "B"
(?<!A)B)
:匹配前面没有"A"
的"B"
但是是否可以将其中任何一个与 AND 和捕获组匹配一起使用?如:
- 无效伪代码
([AB])([AB]&&[^\1])
:匹配 "AB"
或 "BA"
(但不匹配 "AA"
或 "BB"
)
我知道在正则表达式中并没有真正的 AND 操作数,这是另一个应该同时修复的问题..
请注意,上面这只是一个例子,在我的正则表达式中 AB
有点长,捕获组不在它旁边。我只是在这个问题中隔离了问题部分。
代码
([AB])(?!)[AB]
在某些正则表达式引擎中,您可以略微通过使用以下(使用递归)来简化它 - Java 不允许递归,因此此方法不适用可能在 Java.
([AB])(?!)(?1)
说明
([AB])
捕获集合中的一个字符 AB
到捕获组 1
(?!)
负前瞻确保后面的内容与捕获组 1 最近捕获的文本不匹配
[AB]
匹配集合中的一个字符 AB
试试这个正则表达式:
^(?!([AB]))[AB]+$
解释:
^
- 断言字符串的开头
(?!([AB]))
- 否定前瞻验证 A
后面没有另一个 A
或 B
后面没有另一个 B
[AB]+
- 匹配出现 1 次以上的 A
或 B
$
- 断言字符串结束
我知道您可以通过以下方式在正则表达式中使用非操作数:
[^AB]
:匹配除"A"
或"B"
之外的任何内容
A(?!B)
:匹配"A"
,不跟"B"
(?<!A)B)
:匹配前面没有"A"
的"B"
但是是否可以将其中任何一个与 AND 和捕获组匹配一起使用?如:
- 无效伪代码
([AB])([AB]&&[^\1])
:匹配"AB"
或"BA"
(但不匹配"AA"
或"BB"
)
我知道在正则表达式中并没有真正的 AND 操作数,这是另一个应该同时修复的问题..
请注意,上面这只是一个例子,在我的正则表达式中 AB
有点长,捕获组不在它旁边。我只是在这个问题中隔离了问题部分。
代码
([AB])(?!)[AB]
在某些正则表达式引擎中,您可以略微通过使用以下(使用递归)来简化它 - Java 不允许递归,因此此方法不适用可能在 Java.
([AB])(?!)(?1)
说明
([AB])
捕获集合中的一个字符AB
到捕获组 1(?!)
负前瞻确保后面的内容与捕获组 1 最近捕获的文本不匹配[AB]
匹配集合中的一个字符AB
试试这个正则表达式:
^(?!([AB]))[AB]+$
解释:
^
- 断言字符串的开头(?!([AB]))
- 否定前瞻验证A
后面没有另一个A
或B
后面没有另一个B
[AB]+
- 匹配出现 1 次以上的A
或B
$
- 断言字符串结束