【Java】ダブルクォートをreplace()とreplaceAll()で置換しようとしたときの違い
初歩的な知識不足、見逃しのような気もするけどメモしとく。
二重エスケープを避けるため、既にエスケープされているダブルクォートはそのままで、エスケープされていないダブルクォートだけ置換したかったのでString.replaceAll()で正規表現(否定先読み)を使って置換しようとしたが、ダブルクォートがヒットしてくれず上手くいかない。環境はJava8。
str.replaceAll("(?<!\\)\"", "\\\"");
ちなみに、ブラウザ上で正規表現をチェックできる