26

これに一致する正規表現を作成するにはどうすればよい\"ですか(バックスラッシュ、次に引用符)?私がこのような文字列を持っていると仮定します:

<a href=\"google.com\"> click to search </a>

\"すべてをに置き換える必要が"あるため、結果は次のようになります。

<a href="google.com"> click to search </a>

これは機能しませんstr.replaceAll("\\\"", "\"")。見積もりと一致するだけだからです。バックスラッシュを回避する方法がわかりません。最初に円記号を削除することもできましたが、文字列に他の円記号があります。

4

3 に答える 3

69

事前定義された文字クラス\d、数量詞などのような正規表現メカニズムが必要ない場合は、リテラルをreplaceAll期待する正規表現の使用を期待します。replace

str = str.replace("\\\"","\"");

どちらの方法でも、出現するすべてのターゲットが置き換えられますが、replaceターゲットは文字通り処理されます。


しかし、本当にあなたが探している正規表現を使わなければならないのなら

str = str.replaceAll("\\\\\"", "\"")

\正規表現の特殊文字です(たとえば、\d数字を表す文字クラスを作成するために使用されます)。正規表現を通常の文字として扱うには、その特別な意味をオフにするために、正規表現の前に\別の文字を配置する必要があります(エスケープする必要があります)。\したがって、作成しようとしている正規表現はです\\

ただし、テキストを表す文字列リテラルを作成して正規表現\\エンジンに渡すことができるようにするには、4 \"\\\\")として記述する必要があります。これは、文字列リテラル(を使用して記述されたコードの一部)の特殊文字でもあるためです\。タブ。だからあなたもそこから脱出する必要があります。"..."\t\

要するに、あなたは\二度脱出する必要があります:

  • 正規表現で\\
  • そして文字列リテラルで"\\\\"
于 2012-08-02T00:45:54.620 に答える
6

正規表現は必要ありません。

str.replace("\\\"", "\"")

正常に動作するはずです。

このreplaceメソッドは2つの部分文字列を受け取り、重複しない最初の部分文字列をすべて2番目の部分文字列に置き換えます。javadocによる

public String replace(CharSequence target,
                      CharSequence replacement)

リテラルターゲットシーケンスに一致するこの文字列の各サブストリングを、指定されたリテラル置換シーケンスに置き換えます。置換は文字列の最初から最後まで進行します。たとえば、文字列内で置換"aa"すると、ではなく結果になります。"b""aaa""ba""ab"

于 2012-08-02T01:05:31.483 に答える
0

これを試してください: Javaは 2回str.replaceAll("\\\\\"", "\\\"")
置き換えられるため:\

(1)\\\\\"-> \\"(文字列の場合)
(2)\\"-> \"(正規表現の場合)

于 2012-08-02T01:06:05.663 に答える