用带有正则表达式野生字符的字符串替换所有字符串

时间:2012-11-07 12:42:30

标签: java regex string

  

可能重复:
  java String.replaceAll without regex

我有一个字符串,我需要更换它的一些部分 替换文本包含regex wild chars。示例:

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

为什么不进行更换?

2 个答案:

答案 0 :(得分:3)

由于*()都是正则表达式中的元字符。因此,所有这些都需要逃脱。看起来Java有一个方便的方法:

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

但是,更好的选择可能是,不使用正则表达式使用replaceAll函数but simply replace。然后你不需要逃避任何事情。

答案 1 :(得分:2)

String.replaceAll()采用正则表达式,因此它正在尝试扩展这些元字符。

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

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