51

複数行の文字列の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では機能しません!?それはなぜですか、どうすればこれを克服できますか?複数行にまたがるコメント/*...*/のようなものを置き換える必要があります。

4

3 に答える 3

89

Pattern.DOTALLドットを改行と一致させる必要があることを示すには、フラグを使用する必要があります。例えば

Pattern.compile(regex, Pattern.DOTALL).matcher(testIllegal).replaceAll("x")

(?s)または、たとえばを使用してパターン内のフラグを指定します

String regex = "(?s)\\s*/\\*.*\\*/";
于 2010-11-11T12:17:21.653 に答える
14

Pattern.DOTALLコンパイルまたは(?s)パターンに追加します。

これはうまくいくでしょう

String regex = "(?s)\\s*/\\*.*\\*/";

正規表現を使用した複数行のテキストの照合を参照 してください。

于 2010-11-11T12:17:37.123 に答える
7

メタ文字.は、改行以外の任意の文字と一致します。そのため、正規表現は複数行の場合には機能しません。

これを修正するには、改行を含むすべての文字に一致.するものに置き換えます。[\d\D]

動作中のコード

于 2010-11-11T12:17:02.913 に答える