"\"に続かない","で文字列を分割したい
","で文字列を分割する。 ただし、"\"に続く","はエスケープされていると見なして分割しない。
といったときには、「ゼロ幅の否定的後読み」というのを使えばOKです。
// 分割する文字列 String str = "\\,a\\,a,bb\\,,cc\\,,\\,\\,,"; // 「\に続かない,」で分割 String[] strs = str.split( "(?<!\\\\)," ); for ( String s : strs) { System.out.println( s ); }
実行結果です。
\,a\,a bb\, cc\, \,\,
「ゼロ幅の否定的後読み」については正規表現の解説- 上級編が詳しいです。
↑で使っている正規表現
(?<!\\),
では、
(?<!\\)
が「ゼロ幅の否定的後読み」を使っている部分で、これにより、
- ","にマッチするが、
- その前の文字が"\"にマッチするものは除く
文字列を示す正規表現になります。後はsplitの引数でそれを指定してやればOK。