2

JavaでRegExpメタ文字をエスケープしようとしています。以下は私が欲しいものです:

INPUT STRING: "This is $ test"
OUTPUT STRING: "This is \$ test"

これは私が現在行っていることですが、機能していません。

String inputStr= "This is $ test";
inputStr = inputStr.replaceAll("$","\\$");

しかし、出力が間違っています。

"This is $ test$"
4

4 に答える 4

3

あなたは必要になるでしょう:

inputStr.replaceAll("\\$", "\\\\\\$");

$は正規表現で特別な意味を持つため、置き換える文字列には2つの円記号が必要です。したがって、:を取得するには、$\$をエスケープする必要があり、そのバックスラッシュ自体をjava文字列:内でエスケープする必要があります"\\$"

\$の両方が置換文字列で特別な意味を持つため、置換文字列には6つの円記号が必要です。

  • \は、置換文字列の文字をエスケープするために使用できます。
  • $を使用して、置換文字列で逆参照を作成できます。

したがって、目的の置換文字列が "\ $"の場合、次の2つの文字を\\\$それぞれエスケープする必要があります。次に、使用する必要のある各バックスラッシュ(3つ、リテラル1つ、エスケープ用2つ)内でエスケープする必要があります。 java文字列:"\\\\\\$"

参照:Matcher.replaceAll

于 2012-06-14T21:39:54.747 に答える
1

バックスラッシュをエスケープしてメタ文字をエスケープするには、6つのバックスラッシュを配置する必要があります。

inputStr.replaceAll("\\$","\\\\\\$");

于 2012-06-14T21:39:57.307 に答える
1

あなたが言ったように、$は正規表現の予約文字です。次に、それをエスケープする必要があります。これを行うには、円記号を使用できます。

inputStr.replaceAll("\\$", ...);

置換では、$文字と\文字にも特別な意味があります。

置換文字列の円記号()とドル記号($)により、文字列の置換文字列として扱われていた場合とは結果が異なる場合があることに注意してください。Matcher.replaceAllを参照してください

次に、置換はバックスラッシュ文字とドル記号になります。どちらも「\」文字でエスケープされます(文字列を作成するには2倍にする必要があります)。

inputStr.replaceAll("\\$", "\\\\\\$");
于 2012-06-14T21:50:25.100 に答える
0

replaceAllの最初の引数は実際には正規表現であり、$は実際には「文字列の終わりに一致する」ことを意味します。代わりにreplaceを使用できます。これは、正規表現を使用せず、通常の文字列replaceを使用して、この場合に必要なことを実現します。正規表現を使用する場合は、最初の引数の$をエスケープするだけです。

于 2012-06-14T21:35:12.673 に答える