2

我想替换所有完全匹配的

 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)
4

3 回答 3

3

您需要转义左括号和要点。

\b在这个特定案例的末尾也删除。

String modifiedCalc1 = calcStr.replaceAll("fm\\.get\\('"+fname, "fm.get('"+validfName);
于 2012-09-27T14:38:43.860 回答
1

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

calcStr.replaceAll(Pattern.quote("fm.get('Order#"),
                   Matcher.quoteReplacement("fm.get('Order__"));
于 2012-09-27T14:50:33.737 回答
0

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

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

String modifiedCalc1 = calcStr.replace("fm.get('"+fname, "fm.get('"+validfName);
于 2012-09-27T15:09:30.217 回答