String.replaceAll()问题

时间:2012-09-27 14:37:55

标签: java regex

我想替换

的所有完全匹配
 fm.get('Order# 

在一个带有值

的冗长字符串中
 fm.get('Order__'

我使用的语法如下:

    String calcStr = "return fm.get('Order#');";
    String fname = "Order#";
    String validfName = "Order__";

    String modifiedCalc1 = calcStr.replaceAll("fm.get('"+fname+"\\b", "fm.get('"+validfName);
    System.out.println(modifiedCalc1);

但是我遇到了模式错误。

    Exception in thread "main" java.util.regex.PatternSyntaxException:
    Unclosed group near index 18
    \bfm.get('Order#\b
              ^
at java.util.regex.Pattern.error(Unknown Source)
at java.util.regex.Pattern.accept(Unknown Source)

3 个答案:

答案 0 :(得分:3)

你需要逃避左括号和点。

在此特定情况下,最后删除\b

String modifiedCalc1 = calcStr.replaceAll("fm\\.get\\('"+fname, "fm.get('"+validfName);

答案 1 :(得分:1)

如果要使用需要正则表达式的API替换文字字符串,可以使用Pattern.quote(对于模式方)和Matcher.quoteReplacement(对于替换方):

calcStr.replaceAll(Pattern.quote("fm.get('Order#"),
                   Matcher.quoteReplacement("fm.get('Order__"));

答案 2 :(得分:0)

在这种情况下似乎不需要正则表达式功能。

因此可以使用更有效的普通字符串替换:

String modifiedCalc1 = calcStr.replace("fm.get('"+fname, "fm.get('"+validfName);