トップページに戻る    次の正規表現パズルへ    前の正規表現パズルへ

5-23 外側の括弧の中身を検索

正規表現パズル

外側の括弧の中身を検索する。
ただし、各行の括弧は、4個までとする。

検索前


検索後


対象データ

aa(a+b+(c+d)*5)+(a+b)
((a+b)+(c*(d+e))*10)*6
(((a+b)*c)*e)-(e)
a+(-b)
((a+b)*((a+b)*c)*d)


正規表現

(
(?=([^(]*\(){4}[^(]*$)(?=([^)]*\)){4}[^)]*$)|
(?=([^(]*\(){3}[^(]*$)(?=([^)]*\)){3}[^)]*$)|
(?=([^(]*\(){2}[^(]*$)(?=([^)]*\)){2}[^)]*$)|
(?=([^(]*\()[^(]*$)(?=([^)]*\))[^)]*$)
)
\(
.*?\)
(
(?=([^(]*\(){4}[^(]*$)(?=([^)]*\)){4}[^)]*$)|
(?=([^(]*\(){3}[^(]*$)(?=([^)]*\)){3}[^)]*$)|
(?=([^(]*\(){2}[^(]*$)(?=([^)]*\)){2}[^)]*$)|
(?=([^(]*\()[^(]*$)(?=([^)]*\))[^)]*$)|
(?=[^()]*$)
)


解説

各行の括弧の数に上限があるなら、上記のような正規表現を使えます。

Perlでは、別の解があるようです。
詳説 正規表現 第3版
の334ページに書いてありますね。 5-3 最も内側の括弧の中身を検索 5-7 括弧でくくられてないカンマを検索