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 に答える