Find centralized, trusted content and collaborate around the technologies you use most.
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
我有一个类似于找到“匹配括号”的挑战,但我想这是一个更简单的挑战。例如,像“xAAAyBBBz”这样的字符串应该匹配,因为有 3 个 A 和 3 个 B。但是,“xAAyBBBz”不应该匹配,因为有一个“不匹配”B。字符串有任意长度,它应该是一个单一的正则表达式。我可以使用正则表达式中的评估(毕竟是 Perl),我可以(应该!)完全避免正则表达式。但现在我很好奇了。
^[^AB]*(A(?:[^AB]*|(?-1))B)[^AB]*\z
^ [^AB]* # "x" ( A (?: [^AB]* # "y" | (?-1) ) B ) [^AB]* # "z" \z
捕获组(A(?:[^AB]*|(?-1))B)匹配A开头的 a 和B结尾的 a。在这两者之间,可能有任意数量的非(A或B)字符,或者第一个捕获组的模式可能在此位置((?-1))递归匹配。这保证了As 和Bs 是平衡的。
(A(?:[^AB]*|(?-1))B)
A
B
(?-1)