我遇到类似于找到“匹配括号”的挑战,但我想这是一个更简单的挑战。 例如,像“xAAAyBBBz”这样的字符串应该匹配,因为有3个A和3个B.但是,“xAAyBBBz”不应该匹配,因为有一个“不匹配”B.字符串具有任意长度,并且它应该是一个单一的正则表达式。我可以使用in-regexp评估(毕竟它是Perl),我可以(应该!)完全避免使用regexp。但现在我很好奇。
答案 0 :(得分:1)
^[^AB]*(A(?:[^AB]*|(?-1))B)[^AB]*\z
^
[^AB]* # "x"
(
A
(?:
[^AB]* # "y"
|
(?-1)
)
B
)
[^AB]* # "z"
\z
捕获论坛(A(?:[^AB]*|(?-1))B)
在开头与A
匹配,在结尾与B
匹配。在两者之间,可能存在任意数量的非(A
或B
)字符,或者第一个捕获组的模式可能在此位置递归匹配((?-1)
)。这可以保证A
和B
平衡。