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

4-20 文字列データでないカンマを検索(Cのエスケープ方式)

正規表現パズル

CSVデータの、文字列データでないカンマを検索する。

文字列データは、ダブルコーテーションでくくったデータですが、
\\は文字としての\
\"は文字としてのダブルコーテーション
\tはタブ
とします(Cのエスケープ方式)

検索前


検索後


対象データ

1,"abcd,efg","a,bc\\","dd\"\",\"ee,"
"aaa,aa\"c,cc",1,"ee\\\t,\\\\"
1,"\",\",\"ab,\"c,d\"e,f"


正規表現

,(?=(((((?<=\\)|(?!(\\{2})*")).)*(?<!\\)(?=(\\{2})*").){2})*
(((?<=\\)|(?!(\\{2})*")).)*$)


解説

行末までに、\が偶数個連続した直後の"が
偶数個あれば文字列データでないカンマと考えます。

(?<!\\)(?=(\\{2})*")
の否定はドモルガンの法則を使って
((?<=\\)|(?!(\\{2})*"))
となります。

(?<!\\)(?=(\\{2})*")
は、
"
\\"
\\\\"
などの開始位置マッチします。
いいかえれば、文字データでないダブルコートに1対1で対応した位置にマッチします。