замена точной строки в Java, предполагая, что она может содержать специальные символы регулярного выражения - PullRequest
2 голосов
/ 30 сентября 2019

У меня есть входные данные String и шаблон String, и я предполагаю, что они могут содержать всевозможные символы, которые имеют особое значение для регулярных выражений, и я хотел бы, чтобы точная замена слова происходила без какого-либо специального рассмотрения специальных символов. Любое особое значение следует игнорировать. И я не буду точно знать, во время компиляции, сколько таких специальных символов может присутствовать во входной строке или во входном шаблоне.

Итак, вот формальная формулировка проблемы: -

Предположим, что объект input_string является вводом типа String. Затем у нас есть другая строка input_pattern, которая также является объектом типа String.

Теперь я хочу выполнить следующее: -

String result=input_string.replaceFirst(input_pattern,"replacewithsomethingdoesntmatter");

замена должна происходить в режиме «точного» соответствиябез учета какого-либо регулярного выражения специального значения символов, если они присутствуют в строках. Как это сделать?

1 Ответ

1 голос
/ 30 сентября 2019

Вы можете использовать метод Pattern.quote(), чтобы экранировать символы, которые имеют особое значение в регулярных выражениях:

String pattern = "^(.*)$";
String quotedPattern = Pattern.quote(pattern);

System.out.println(quotedPattern);

. Это обернет шаблон в кавычки (\Qи \E), указывающий, что обернутая последовательность должна соответствовать буквально.

В качестве альтернативы вы можете обернуть шаблон в кавычки вручную:

String pattern = "^(.*)$";
String quotedPattern = "\\Q" + pattern + "\\E";

System.out.println(quotedPattern);

Первый подход, вероятно, безопаснеепотому что он также создаст условия для выражений, которые уже содержат кавычки.

...