複数行の文字列のreplaceAllに問題があります。
String regex = "\\s*/\\*.*\\*/";
String testWorks = " /** this should be replaced **/ just text";
String testIllegal = " /** this should be replaced \n **/ just text";
testWorks.replaceAll(regex, "x");
testIllegal.replaceAll(regex, "x");
上記はtestWorksで機能しますが、testIllegalでは機能しません!?それはなぜですか、どうすればこれを克服できますか?複数行にわたるコメント/ * ... * /のようなものを置き換える必要があります。
Pattern.DOTALL
フラグを使用して、ドットが改行と一致する必要があることを示す必要があります。例えば.
Pattern.compile(regex, Pattern.DOTALL).matcher(testIllegal).replaceAll("x")
または、(?s)
を使用してパターンにフラグを指定します。
String regex = "(?s)\\s*/\\*.*\\*/";
追加 Pattern.DOTALL
をコンパイルするか、(?s)
パターンに。
これはうまくいくでしょう
String regex = "(?s)\\s*/\\*.*\\*/";
正規表現を使用した複数行テキストの一致 を参照してください
メタ文字.
は、改行以外の任意の文字に一致します。これが、複数行の場合に正規表現が機能しない理由です。
これを修正するには、.
with [\d\D]
は、改行を含むany文字に一致します。