Почему экранирование двойной кавычки с одинарной и тройной обратной косой чертой в регулярном выражении Java дает одинаковые результаты - PullRequest
0 голосов
/ 27 июня 2018

Я хочу экранировать " (двойные кавычки) в регулярном выражении.

Я обнаружил, что нет никакой разницы, использую ли я \\\ или \, оба дают одинаковый правильный результат.

Почему это так? Как первый может дать правильный результат?

Ответы [ 2 ]

0 голосов
/ 27 июня 2018

Чтобы определить символ " в строковом литерале в Java, вам нужно его отключить для механизма разбора строк, например "\"".

Символ " является , а не специальным метасимволом регулярных выражений, поэтому вам не нужно экранировать этот символ для механизма регулярных выражений . Однако вы можете сделать это :

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

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

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

Итак, "\"" (буквальная " строка) и "\\\"" (буквальная \" строка) образуют шаблон регулярного выражения, соответствующий одному " символу.

0 голосов
/ 27 июня 2018

Попробуйте использовать это:

String regex = "(\"\\w+\")";
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher("Some \"test\" string. And \"another\" quoted word.");

while (matcher.find()) {
    System.out.println(matcher.group());
}

Печать:

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