仕事で次の正規表現に出くわしました。それは何をするためのものか?
,(?=(?:[^\"]*\"[^\"]*\")*(?![^\"]*\"))
それを理解するために、私はそれを次の部分に分割しました
,
= 持っているものすべてに一致,
(?=
= 続いて(?:[^\"]*\"[^\"]*\")*
= 一致しないもの"
、その後に"
、一致しないもの"
、その後に"
. たとえば、1111"aaaaa"(?![^\"]*\")
"
= しかし、一致しないものは何も続かない"
つまり、OR が後に,
続くものすべてに一致します。11111"111"
""
で区切られた文字列を単にトークン化するために上記の式が使用されるユースケース,
ですが、作成者がより一般的なもののために構築したと想定しています。
誰かが上記よりも簡単な説明を提供できますか?
上記の式は、boost::regex() に式を割り当てるために使用されます。
更新:実際には、次の制約で「、」コンマを検索しています
コンマに続く"は偶数でもOK
ただし、コンマの後に " を 1 つだけ付けても問題ありません
たとえば、次の文字列を考えてみましょう: a, "h,w", 23
最初の "," は、その後に偶数個の " ("h,w") があるため、一致します。
"h,w" の間の 2 番目の "," は、2 番目の式 (?![^\"]*\") により、"," の後に単一の "
最後に最後の「,」が一致します。
最終的な出力は 2 , , になります