0

重複の可能性:
正規表現なしの java String.replaceAll

弦があり、その一部を交換する必要があります。
ただし、置換テキストには正規表現のワイルド文字が含まれています。例:

String target = "Something * to do in ('AAA', 'BBB')";    
String replacement = "Hello";    
String originalText = "ABCDEFHGIJKLMN" + target + "ABCDEFHGIJKLMN";  
System.out.println(originalText.replaceAll(target, replacement));    

私は得る:
ABCDEFHGIJKLMNSomething * to do in ('AAA', 'BBB')ABCDEFHGIJKLMN

入れ替わりが起きないのはなぜ?

4

2 に答える 2

3

*、、(および)はすべて正規表現のメタ文字であるためです。したがって、それらすべてをエスケープする必要があります。Javaにはこれに便利な方法があるようです。

java.util.regex.Pattern.quote(target)

ただし、正規表現を使用するreplaceAll関数を使用するのではなく、単にreplace使用する方がよい場合があります。そうすれば、何も逃げる必要はありません。

于 2012-11-07T12:45:32.773 に答える
2

String.replaceAll()正規表現を使用するため、これらのメタ文字を拡張しようとしています。

1つのアプローチは、これらの文字をエスケープ\*することです(例)。

もう1つは、String.indexOf()を使用して、含まれている文字列の先頭を見つけることにより、自分で置換を行うことです。indexOf()正規表現ではなく、通常の文字列を取ります。

于 2012-11-07T12:45:21.420 に答える