Java String.replaceAll正则表达式

时间:2010-04-08 17:35:11

标签: java regex replace

我想替换

的第一个上下文
  

网/风格/ clients.html

使用java String.replaceFirst方法,所以我可以得到:

  

$ {pageContext.request.contextPath} /style/clients.html

我试过

String test =  "web/style/clients.html".replaceFirst("^.*?/", "hello/");

这给了我:

  

您好/风格/ clients.html

但是当我做的时候

 String test =  "web/style/clients.html".replaceFirst("^.*?/", "${pageContext.request.contextPath}/");

给了我

java.lang.IllegalArgumentException:非法组引用

4 个答案:

答案 0 :(得分:7)

我的预感是它正在爆炸,因为$是一个特殊角色。来自the documentation

  

请注意反斜杠()和美元   替换字符串中的符号($)   可能会导致结果不同   而不是被视为一个   字面替换字符串。美元   标志可以作为参考   捕获的子序列如上所述   上面,反斜杠用于   逃避文字中的字符   替换字符串。

所以我相信你需要像

这样的东西
"\\${pageContext.request.contextPath}/"

答案 1 :(得分:6)

有一种方法可用于转义替换Matcher.quoteReplacement()中的所有特殊字符:

String test =  "web/style/clients.html".replaceFirst("^.*?/", Matcher.quoteReplacement("${pageContext.request.contextPath}/"));

答案 2 :(得分:1)

String test = "web/style/clients.html".replaceFirst("^.*?/", "\\${pageContext.request.contextPath}/");

应该做的伎俩。 $用于正则表达式中的反向引用

答案 3 :(得分:0)

$是一个特殊角色,你必须逃脱它。

String test =  "web/style/clients.html".replaceFirst("^.*?/", "\\${pageContext.request.contextPath}/");