|
問い合わせの内容の説明不足で失礼しました。
問題の正規表現は実は、例えば
aaa(a(aa)aa)a)aa(aaa
という文字列の中から4文字目から14文字目までの
(a(aa)aa)a)
だけを抜き出すことを意図したものです。
正規表現
(?#lookbehind)(\y|\Y)(?=\()(a|(\((?=a*\)))|((?<=\(a*)\)))*(?<=\))(\y|\Y)
の中央部の
(a|(\((?=a*\)))|((?<=\(a*)\)))*
はaと括弧の羅列の内、括弧が向かい合わせになっている条件を指定したもので、両端の
(\y|\Y)
は上記の条件を満たす部分の開始点と終了点で、左側の
(\y|\Y)(?=\()
は開始点の右隣がが(であること、右側の
(?<=\))(\y|\Y)
は終了点の左隣が)であることを指示するものであるから、左端の(?=\()が後方参照
で右端の(?<=\))が前方参照であるのは意図的な配置です。
実際の運用はもっと複雑なパターンで、前方参照と後方参照の部分に開始点と終了点
を明示的に指定するための条件が入ります。括弧の入れ子で構成されたC#のタプル型
の型名だけを抜き出す強調表示を定義しようとして、マッチした文字列にタプルとは
関係ない括弧を除外しようとしてうまくいかなかったため、問題を洗い出すため簡単
な例を示した次第であります。
|
|