Java String.replaceAll регулярное выражение - PullRequest
3 голосов
/ 08 апреля 2010

Я хочу заменить первый контекст

Web / стиль / 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 ]

7 голосов
/ 08 апреля 2010

Я догадываюсь, что он взрывается, так как $ - специальный символ С документация

Обратите внимание, что обратная косая черта () и доллар знаки ($) в строке замены может привести к разным результатам чем если бы это рассматривалось как буквенная замена строки. доллар знаки могут рассматриваться как ссылки на захваченные подпоследовательности, как описано выше, а обратные слеши используются для избежать буквальных символов в строка замены.

Так что я считаю, что вам нужно что-то вроде

"\\${pageContext.request.contextPath}/"
6 голосов
/ 08 апреля 2010

Уже доступен метод для экранирования всех специальных символов в замене Matcher.quoteReplacement():

String test =  "web/style/clients.html".replaceFirst("^.*?/", Matcher.quoteReplacement("${pageContext.request.contextPath}/"));
1 голос
/ 08 апреля 2010

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

должен сделать свое дело. $ используется для обратных ссылок в регулярных выражениях

0 голосов
/ 08 апреля 2010

$ - это специальный символ, вы должны его избежать.

String test =  "web/style/clients.html".replaceFirst("^.*?/", "\\${pageContext.request.contextPath}/");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...