Экранирование специальных символов в регулярных выражениях Java (без кавычек) - PullRequest
0 голосов
/ 04 августа 2011

Я пытаюсь сопоставить пользовательский ввод с подстановочными знаками, которые проще, чем синтаксис 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

Есть ли встроенный способ действительно экранировать специальные символы, а не заключать в кавычки всю строку?

1 Ответ

1 голос
/ 04 августа 2011

Вам нужно найти %A%, процитировать все до него, все после него и заменить его соответствующим синтаксисом регулярных выражений.

Я не уверен, каковы полные требования для этого подстановочного знака,но если он может быть только %A%, он будет выглядеть примерно так:

String searchString = "this ( is \\ a $ %A%.";
String extractorToken = "(.+?)";

int indexOfWildcard = searchString.indexOf("%A%");
String pattern = Pattern.quote(searchString.substring(0, indexOfWildcard)) +
                 extractorToken +
                 Pattern.quote(searchString.substring(indexOfWildcard + 3, searchString.length()));
Matcher matcher = Pattern.compile(pattern).matcher(inputString);

Если подстановочный знак может иметь разные формы, вы можете вместо этого использовать регулярное выражение, чтобы найти положение подстановочного знака, а затем выполнитьвыше.

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