2012-08-16 117 views
1

当前,String类的replaceAll方法以及Matcher.replaceAll方法将其参数评估为正则表达式。replaceAll类型的方法保留特殊字符

我遇到的问题是我传递给这些方法之一的替换字符串包含美元符号(这当然在正则表达式中有特殊含义)。一个简单的解决办法是将我的替换字符串传递给'Matcher.quoteReplacement',因为这会产生一个带有文字字符的字符串,然后将此字符串传递给replaceAll

不幸的是,我不能这样做,因为我需要保留特殊字符,因为生成的字符串稍后会在需要使用reg ex的操作中使用,并且如果我已经转义了所有特殊字符,合同。

有人可以请建议一种方式,我可能会实现我想要做的事情吗?非常感谢。

编辑:为了更清楚的解释,请看下面的代码示例:

String key = "USD"; 
String value = "$"; 

String content = "The figure is in USD"; 
String contentAfterReplacement; 

contentAfterReplacement = content.replaceAll(key, value); //will throw an exception as it will evaluate the $ in 'value' variable as special regex character 

contentAfterReplacement = content.replaceAll(key, Matcher.quoteReplacement(value)); //Can't do this as contentAfterReplacement is passed on and later parsed as a regex (Ie, it can't have special characters escaped). 
+1

我不确定你的问题是什么。你能否将'matcher.quoteReplacement'的结果保存到一个临时变量中,该变量只能用于正则表达式?如果你能提供一个代码示例,这将更加清晰。 – WouterH 2012-08-16 09:12:59

回答

2

为什么不使用String#replace方法,而不是replaceAllreplaceAll使用正则表达式,但replace不使用替换字符串中的正则表达式。

+0

谢谢anubhava - 我很尴尬,我错过了那么明显的东西! – Paul 2012-08-16 09:35:51

+0

非常欢迎,很高兴它为你工作。 – anubhava 2012-08-16 10:41:06