StringEscapeUtils не экранирует { - PullRequest
       14

StringEscapeUtils не экранирует {

1 голос
/ 02 декабря 2011

У меня есть следующая строка:

String str = "{% assign foo = values %}.{{ foo[0] }}."

И я пытаюсь скомпилировать его как шаблон с:

Pattern p = Pattern.compile(StringEscapeUtils.escapeJava(str));

но компиляция не удалась с ошибкой "Недопустимое повторение", которая, как я полагаю, происходит из-за того, что символ '{' не экранирован.

Как мне избежать этого правильно? Желательно без добавления «\\» перед каждым символом.

Ответы [ 3 ]

5 голосов
/ 02 декабря 2011

Вы не хотите StringEscapeUtils.escapeJava() Вы хотите Pattern.quote().

1 голос
/ 02 декабря 2011

Escape с \, в строках Java вы должны также экранировать \ само по себе:

String str = "\\{% assign foo = values %\\}.\\{\\{ foo\\[0\\] \\}\\}\\.";

Для автоматического сброса метасимволов вы можете использовать Pattern.quote(str).

0 голосов
/ 02 декабря 2011

В большинстве движков PCRE вы можете заключить буквенный текст в регулярное выражение с помощью \ Q ... \ E

где \ Q - начальная кавычка метасхем, \ E - конец мета-кавычек.

По сути, он выполняет глобальный поиск / замену '([.*+?|()\[\]{}^\$\\])' на '\\$1' между \ Q и \ E.

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