Как вы избегаете доллара и скобок (то есть $ {title}) в регулярном выражении Java? - PullRequest
13 голосов
/ 20 мая 2011

Т.е. как ты это делаешь?

String string = "Sample string with ${title} to be inserted.";
string.replaceAll("${title}", title);

Все следующие результаты приводят к ошибке:

string.replaceAll("\\${title}", title);
string.replaceAll("\\\\${title}", title);
string.replaceAll("\\\\$\\{title\\}", title);

И еще, похоже, ничего не работает, все это приводит к ошибке, подобной этой:

java.util.regex.PatternSyntaxException: Illegal repetition near index 4 \\$\\{title\\}
    at java.util.regex.Pattern.error(Pattern.java:1713)
    at java.util.regex.Pattern.closure(Pattern.java:2775)
    at java.util.regex.Pattern.sequence(Pattern.java:1889)
    at java.util.regex.Pattern.expr(Pattern.java:1752)

Ответы [ 6 ]

23 голосов
/ 20 мая 2011

В классе Pattern есть функция escape для таких применений, как это

string.replaceAll(Pattern.quote("${title}"), title);
15 голосов
/ 20 мая 2011

Не уверен, как последний из них приведет к ошибке;это просто ничего не соответствует, потому что вы используете слишком много обратной косой черты на $.

Это должно работать:

string.replaceAll("\\$\\{title\\}", title);
6 голосов
/ 20 мая 2011

Вы можете экранировать строку поиска как \Q${title}\E

1 голос
/ 20 мая 2011

Это похоже на типичный вариант использования языка шаблонов, такого как FreeMarker.

0 голосов
/ 24 мая 2011

В Регулярном выражении escape-символ \, чтобы использовать это, мы должны написать \\, как в String, \ используется в качестве escape-символа.

Например, str = str.replaceAll("rot\\*speed", "rotorspeed");

rot*speed будет заменено на rotorspeed.

0 голосов
/ 20 мая 2011

\$\{title\}

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