10

のような入力文字列が"\\{\\{\\{testing}}}"あり、すべて削除したい"\"。必要な o/p: "{{{testing}}}"

これを達成するために次のコードを使用しています。

protected String removeEscapeChars(String regex, String remainingValue) {
    Matcher matcher = Pattern.compile(regex, Pattern.CASE_INSENSITIVE).matcher(remainingValue);
    while (matcher.find()) {
        String before = remainingValue.substring(0, matcher.start());
        String after = remainingValue.substring(matcher.start() + 1);
        remainingValue = (before + after);
    }
    return remainingValue;
}

として正規表現を渡してい"\\\\{.*?\\\\}"ます。

コードは「\{」の最初の出現に対してのみ正常に機能しますが、すべての出現に対しては機能しません。さまざまな入力に対して次の出力が表示されます。

  1. i/p: "\\{testing}"- o/p:"{testing}"
  2. i/p: "\\{\\{testing}}"- o/p:"{\\{testing}}"
  3. i/p: "\\{\\{\\{testing}}}"- o/p:"{\\{\\{testing}}}"

"\"渡された i/p 文字列からI wantを削除し、すべて"\\{"を に置き換える必要があり"{"ます。

問題は正規表現の値、つまり"\\\\{.*?\\\\}".

get required o/p の正規表現値を教えてください。

4

4 に答える 4

11

単に使用していない理由はありますString#replaceか?

String noSlashes = input.replace("\\", "");

または、中括弧を開く前にのみバックスラッシュを削除する必要がある場合:

String noSlashes = input.replace("\\{", "{");
于 2012-09-14T10:59:08.533 に答える
2

次のように簡単にする必要があります。

String result = remainingValue.replace("\\", "");
于 2012-09-14T10:59:48.640 に答える
1

\以前に回答したように、前のスラッシュのみを削除したい場合は{、を使用するのが最善の方法です。

String noSlashes = input.replace("\\{", "{");

しかし、あなたの質問では、正規表現の値を教えてもらえますか\の直前ではなく、後で適切に閉じられ{たものだけを削除したいという理由で正規表現を使用している場合、答えは「いいえ」です。ネストされたものを正規表現と一致させることはできません。{}{}

于 2012-09-14T11:24:27.123 に答える
-1

正規表現を変更します。"\\&([^;]{6})"

private String removeEscapeChars(String remainingValue) {
        Matcher matcher = Pattern.compile("\\&([^;]{6})", Pattern.CASE_INSENSITIVE).matcher(remainingValue);
        while (matcher.find()) {
            String before = remainingValue.substring(0, matcher.start());
            String after = remainingValue.substring(matcher.start() + 1);
            remainingValue = (before + after);
        }
        return remainingValue;
    }

それは動作するはずです..

于 2015-01-28T14:12:37.017 に答える