Косая черта в Java Regex - PullRequest
       1

Косая черта в Java Regex

48 голосов
/ 06 марта 2012

Я не могу понять, почему следующий код не работает должным образом

"Hello/You/There".replaceAll("/", "\\/");
  • Ожидаемый результат: Hello\/You\/There
  • Фактический результат: Hello/You/There

Нужно ли избегать косых черт?Я так не думал, но я также попробовал следующее против моей воли ... не сработало

"Hello/You/There".replaceAll("\\/", "\\/");

В конце я понял, что мне не нужно регулярное выражение, и я могу просто использоватьследующее, которое не создает регулярное выражение

"Hello/You/There".replace("/", "\\/");

Однако я все же хотел бы понять, почему мой первый пример не работает.

Ответы [ 3 ]

74 голосов
/ 06 марта 2012

Проблема на самом деле в том, что вам нужно дважды экранировать обратную косую черту в строке замены.Вы видите, "\\/" (как я уверен, вы знаете) означает, что строка замены \/, и (как вы, вероятно, не знаете) строка замены \/ фактически просто вставляет /, потому что Javaстранно, и дает \ особое значение в строке замены.(Предположительно так, что \$ будет буквальным знаком доллара, но я думаю, что настоящая причина в том, что они хотели связываться с людьми. Другие языки так не делают.) Поэтому вы должны написать либо:

"Hello/You/There".replaceAll("/", "\\\\/");

или:

"Hello/You/There".replaceAll("/", Matcher.quoteReplacement("\\/"));

(используется java.util.regex.Matcher.quoteReplacement(String).)

1 голос
/ 30 сентября 2013

Двойное экранирование требуется, когда представлено в виде строки.

Всякий раз, когда я создаю новое регулярное выражение, я выполняю кучу тестов с онлайн-инструментами, например: http://www.regexplanet.com/advanced/java/index.html

Этот веб-сайт позволяет вам вводить регулярное выражение, которое он будет экранировать в строку для вас, и затем вы можете проверить его на различных входных данных.

0 голосов
/ 19 сентября 2013

На самом деле есть причина, почему все это испорчено. В этой теме немного больше копания глубже, и может быть полезно понять причину, по которой "\\" ведет себя так.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...