2

「一致する角かっこ」を見つけるのと同じような課題がありますが、これはもっと簡単なものだと思います。たとえば、3つのAと3つのBがあるため、「xAAAyBBBz」のような文字列は一致する必要があります。ただし、「一致しない」Bが1つあるため、「xAAyBBBz」は一致しないはずです。文字列の長さは任意であり、単一の正規表現であると想定されます。私は正規表現内評価を使用することができ(結局はPerlです)、正規表現をまったく回避することができました(すべきです!)。しかし今、私は興味を持ちました。

4

1 に答える 1

1
^[^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

于 2012-12-14T17:32:25.543 に答える