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.
「一致する角かっこ」を見つけるのと同じような課題がありますが、これはもっと簡単なものだと思います。たとえば、3つのAと3つのBがあるため、「xAAAyBBBz」のような文字列は一致する必要があります。ただし、「一致しない」Bが1つあるため、「xAAyBBBz」は一致しないはずです。文字列の長さは任意であり、単一の正規表現であると想定されます。私は正規表現内評価を使用することができ(結局はPerlです)、正規表現をまったく回避することができました(すべきです!)。しかし今、私は興味を持ちました。
^[^AB]*(A(?:[^AB]*|(?-1))B)[^AB]*\z
^ [^AB]* # "x" ( A (?: [^AB]* # "y" | (?-1) ) B ) [^AB]* # "z" \z
キャプチャ グループは、先頭の aと末尾の a に(A(?:[^AB]*|(?-1))B)一致します。その間に任意の数の非 (または) 文字が存在するか、最初のキャプチャ グループのパターンがこの位置で再帰的に一致する可能性があります ( )。これにより、とのバランスが保たれます。ABAB(?-1)AB
(A(?:[^AB]*|(?-1))B)
A
B
(?-1)