Как вы избегаете доллара и фигурных скобок (т.е. ${Title}) в регулярном выражении java?

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

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)

Ответы

Ответ 1

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

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

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

Ответ 2

У класса Pattern есть функция escape для таких функций, как

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

Ответ 3

Вы можете избежать строки поиска как \Q${title}\E

Ответ 4

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

Ответ 5

\$\{title\}

Ответ 6

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

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

rot*speed заменит на rotorspeed ,