Pattern.quote(String s)
Рода делает то , что вы хотите. Однако это оставляет желать лучшего; на самом деле он не экранирует отдельные символы, а просто оборачивает строку \Q...\E
.
Не существует метода, который бы делал именно то, что вы ищете, но хорошая новость заключается в том, что на самом деле довольно просто избежать всех специальных символов в регулярном выражении Java:
regex.replaceAll("[\\W]", "\\\\$0")
Почему это работает? Что ж, документация дляPattern
специально сказано, что разрешено экранировать неалфавитные символы, которые не обязательно экранировать:
Ошибочно использовать обратную косую черту перед любым буквенным символом, который не обозначает экранированную конструкцию; они зарезервированы для будущих расширений языка регулярных выражений.Обратный слэш может использоваться перед неалфавитным символом независимо от того, является ли этот символ частью неэкранированной конструкции.
Например, ;
это не специальный символ в регулярном выражении. Однако, если вы его избежите, Pattern
все равно будет интерпретироваться \;
как;
. Вот еще несколько примеров:
>
становится \>
что эквивалентно>
[
становится \[
в ускользнувшую форму[
8
все еще 8
.
\)
превращается \\\)
в ускользнувшие формы \
и (
сцепленные.
Примечание: Ключ является определением «неалфавитным», что в документации на самом деле означает «не- слово » символы или символы вне набора символов [a-zA-Z_0-9]
.