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