我想替换
的第一个上下文网/风格/ 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:非法组引用
答案 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}/");