再帰やグループのバランスをとらずに入れ子になった括弧を一致させる
課題:
次のような正規表現を使用できます。 Java の java.util.regex では、再帰やグループのバランスをとることなく、任意にネストされた括弧に一致しますか?
解決策:
はい、前方参照を使用することで可能です:
(?=\()(?:(?=.*?\((?!.*?)(.*\)(?!.*).*))(?=.*?\)(?!.*?)(.*)).)+?.*?(?=)[^(]*(?=$)
仕組み:
この式は、複数の先読みと前方参照で構成され、これらが連携してネストされた括弧のグループを識別します。
例:
次の文字列は 3 つのネストされたグループと一致します:
(F(i(r(s)t))) ((S)(e)((c)(o))(n)d) (((((((Third)))))))
内部グループの一致:
内部グループと一致するには、キャプチャ グループを追加できます。式の最後まで:
(?=\()(?=((?:(?=.*?\((?!.*?)(.*\)(?!.*).*))(?=.*?\)(?!.*?)(.*)).)+?.*?(?=)[^(]*(?=$)))
以上が正規表現は、再帰やグループのバランシングを行わずに、入れ子になった括弧を照合できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。