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()接受一个正则表达式,因此它试图扩展这些元字符。

一种方法是转义这些字符(例如\*)。

另一种方法是通过使用String.indexOf()并找到包含的字符串的开头来自己进行替换。indexOf()不采用正则表达式,而是采用普通字符串。

于 2012-11-07T12:45:21.420 回答