Превратить предоставленную пользователем строку в буквальную строку, чтобы добавить предопределенное регулярное выражение - PullRequest
1 голос
/ 28 октября 2011

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

По существу,способ сказать «то, что предоставил пользователь, с последующим этим шаблоном».

Это заставляет меня думать, что мне может потребоваться очистить строку, предоставленную пользователем, чтобы избежать метасимволов.

Например, это то, что я пытался

\\ Replace "\" with "\\"<br> String rE = userText.replaceAll("\\", "\\\\");<br> \\ Replace . with \.<br> rE = rE.replaceAll(".", "\\.");

Однако это не так со следующим сообщением при сопоставлении \ escaping

Execution aborted because of unhandled exception:
java.util.regex.PatternSyntaxException: Unexpected internal error near index 1
\
^ at java.util.regex.Pattern.error(Pattern.java:1725)
at java.util.regex.Pattern.compile(Pattern.java:1478)

Есть ли более простой способсделай это?Я подозреваю, что есть встроенный метод для превращения потенциальных regEx в литералы, но я не могу его найти.

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

Ответы [ 2 ]

6 голосов
/ 28 октября 2011

Использование Pattern.quote Метод для цитирования предоставленной пользователем строки как литерал шаблон.

1 голос
/ 28 октября 2011

Используйте метод Pattern.quote для экранирования всех метасимволов или escape-последовательностей:

String rE = Pattern.quote("\\");

Этот метод создает String, который можно использовать для создания Pattern, что соответствует строке s, как если бы это был буквальный шаблон.

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