Search code examples
javaregexreplaceall

Java regex replaceAll multiline


I have a problem with the replaceAll for a multiline string:

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"); 

The above works for testWorks, but not for testIllegal!? Why is that and how can I overcome this? I need to replace something like a comment /* ... */ that spans multiple lines.


Solution

  • You need to use the Pattern.DOTALL flag to say that the dot should match newlines. e.g.

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

    or alternatively specify the flag in the pattern using (?s) e.g.

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