Регулярные выражения Java и знак доллара - PullRequest
19 голосов
/ 04 октября 2010

У меня есть строка Java:

String b = "/feedback/com.school.edu.domain.feedback.Review$0/feedbackId");

Я также сгенерировал шаблон, с которым я хочу сопоставить эту строку:

String pattern = "/feedback/com.school.edu.domain.feedback.Review$0(.)*";

Когда я говорю b.matches(pattern), возвращается false. Теперь я знаю, что знак доллара является частью Java RegEx, но я не знаю, как должен выглядеть мой шаблон. Я предполагаю, что $ in pattern должен быть заменен некоторыми управляющими символами, но не знаю, сколько. Этот знак $ важен для меня, поскольку он помогает мне различать элементы в списке (цифры за долларом), и я не могу без него.

Ответы [ 4 ]

54 голосов
/ 04 октября 2010

Используйте

String escapedString = java.util.regex.Pattern.quote(myString)

до автоматически экранируют все специальные символы регулярного выражения в данной строке.

29 голосов
/ 04 октября 2010

Вам необходимо экранировать $ в регулярном выражении с обратной косой чертой (\), но в качестве обратной косой черты является escape-символ в строках , которые вам нужны чтобы избежать самой обратной косой черты.

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

String pattern = "/feedback/com\\.navteq\\.lcms\\.common\\.domain\\.poi\\.feedback\\.Review\\$0(.)*";
7 голосов
/ 04 октября 2010

В Java regex оба . и $ являются специальными. Вы должны избежать его с двумя обратными слешами, т. Е.

"/feedback/com\\.navtag\\.etc\\.Review\\$0(.*)"

(1 обратный слеш для строки Java, а 1 для механизма регулярных выражений.)

2 голосов
/ 04 октября 2010

Избегайте доллара с помощью \

String pattern = 
  "/feedback/com.navteq.lcms.common.domain.poi.feedback.Review\\$0(.)*";

Я советую вам также экранировать ., . представляет любой символ.

String pattern = 
  "/feedback/com\\.navteq\\.lcms\\.common\\.domain\\.poi\\.feedback\\.Review\\$0(.)*"; 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...