Why does replaceAll fail with “illegal group reference”?

前端 未结 8 1554
轻奢々
轻奢々 2020-12-01 09:56

I am in need to replace

\\\\\\s+\\\\$\\\\$ to $$

I used

String s = \"  $$\";
s = s.replaceAll(\"\\\\s+\\\\$\\\\$\",\"$$\"         


        
8条回答
  •  無奈伤痛
    2020-12-01 10:48

    From String#replaceAll javadoc:

    Note that backslashes (\) and dollar signs ($) in the replacement string may cause the results to be different than if it were being treated as a literal replacement string; see Matcher.replaceAll. Use Matcher.quoteReplacement(java.lang.String) to suppress the special meaning of these characters, if desired.

    So escaping of an arbitrary replacement string can be done using Matcher#quoteReplacement:

    String s = "  $$";
    s = s.replaceAll("\\s+\\$\\$", Matcher.quoteReplacement("$$"));
    

    Also escaping of the pattern can be done with Pattern#quote

    String s = "  $$";
    s = s.replaceAll("\\s+" + Pattern.quote("$$"), Matcher.quoteReplacement("$$"));
    

提交回复
热议问题