我想替换
的所有完全匹配 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)
答案 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);