エスケープされたカンマを無視して、カンマで区切られた文字列を分割するにはどうすればよいでしょうか? 質問する

エスケープされたカンマを無視して、カンマで区切られた文字列を分割するにはどうすればよいでしょうか? 質問する

追加のパラメータであるエスケープ文字を取得する StringUtils.commaDelimitedListToStringArray 関数の拡張バージョンを作成する必要があります。

だから私の呼び出し:

commaDelimitedListToStringArray("test,test\\,test\\,test,test", "\\")

返される値:

["test", "test,test,test", "test"]



私の現在の試みは、String.split() を使用して正規表現で文字列を分割することです。

String[] array = str.split("[^\\\\],");

ただし、返される配列は次のようになります。

["tes", "test\,test\,tes", "test"]

何か案は?

ベストアンサー1

正規表現

[^\\],

は「バックスラッシュの後にコンマが続く文字ではない文字に一致する」ことを意味します。 などのパターンがt,一致するのは、tがバックスラッシュではない文字であるためです。

何らかの方法を使う必要があると思います否定的な後読み、先行する文字をキャプチャせずに,、前に a がないa をキャプチャするには、次のようにします。\

(?<!\\),

(ちなみに、読みやすくするために、バックスラッシュを二重にエスケープしていないことに注意してください)

おすすめ記事