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

5-7 括弧でくくられてないカンマを検索

正規表現パズル

括弧でくくられてないカンマを検索する。
ただし、1行につき括弧の数は、4個までとする

検索前


検索後


対象データ

(a,b)
(a,b),((c,d),(e,f))
(a,b),(c,d)
a,b,c,(d,e)
((a,b)+(c,d))*3+(a,b)*5
((a,b)+(c,d))*3+(a,b)*5,(a,b)
a,b,c,


正規表現

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


解説

肯定先読みで、
開き括弧と、閉じ括弧の数が等しければ、括弧でくくられてない
という考え方をしてます

■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
ちなみに、括弧でくくられたカンマを検索する正規表現は、
_________________________
A*B + C*D + E*F + G*H + I
に、ドモルガンの法則を適用して
 ___     ___     ___     ___    _
(A*B) * (C*D) * (E*F) * (G*H) * I

再度、ドモルガンの法則を適用して
 _ _     _ _     _ _     _ _    _
(A+B) * (C+D) * (E+F) * (G+H) * I

よって、
,(((?!([^(]*\(){4}[^(]*$)|(?!([^)]*\)){4}[^)]*$))
((?!([^(]*\(){3}[^(]*$)|(?!([^)]*\)){3}[^)]*$))
((?!([^(]*\(){2}[^(]*$)|(?!([^)]*\)){2}[^)]*$))
((?!([^(]*\(){1}[^(]*$)|(?!([^)]*\)){1}[^)]*$))
(?![^()]*$))

となります。

A*B + C*D + E*F + G*H + I = 0
に双対の原理を適用して
 _ _     _ _     _ _     _ _    _
(A+B) * (C+D) * (E+F) * (G+H) + I = 1
と変形してもいいですけどね

5-3 最も内側の括弧の中身を検索
5-23 外側の括弧の中身を検索