Я пытаюсь сопоставить пользовательский ввод с подстановочными знаками, которые проще, чем синтаксис Java Regex. Скажем, есть подстановочный знак А. Затем пользователь вводит строку ввода:
this ( is \ a $ test.
и сопоставьте 'test' со строкой поиска:
this ( is \ a $ %A%.
Я делаю это, заменяя подстановочную строку в строке поиска на (.+?)
, так что я могу сопоставить подстановочный знак с группами захвата обычного регулярного выражения. Тем не менее, я все еще хочу экранировать специальные символы. Если я использую кавычку, регулярное выражение больше не будет работать, поскольку символы со значением регулярного выражения ((.+?)
) также заключаются в кавычки:
String inputString = "this ( is \\ a $ test."
String searchString = "this ( is \\ a $ %A%."
String regex = Pattern.quote(searchString);
//regex = "\\Qthis ( is \\ a $ %A%.\\E"
regex = regex.replaceFirst("%A%", "(.+?)");
//regex = "\\Qthis ( is \\ a $ (.+?).\\E"
Matcher matcher = Pattern.compile(regex).matcher(inputString); //no match
Есть ли встроенный способ действительно экранировать специальные символы, а не заключать в кавычки всю строку?