Метод quote
Метод quote класса Pattern принимает
одну строку в качестве параметра и возвращает новую
строку, в которой все специальные символы регулярного
выражения экранированы. Это позволяет использовать
произвольный текст как литеральный шаблон для поиска,
не опасаясь, что символы вроде ., *,
+ или ? будут восприняты как
метасимволы регулярного выражения. В первый параметр
мы передаем строку, которую нужно экранировать.
Синтаксис
Pattern.quote(String s)
Пример
Давайте экранируем строку, содержащую точку, и найдем ее в тексте как литерал:
import java.util.regex.Pattern;
import java.util.regex.Matcher;
public class Main
{
public static void main(String[] args)
{
String str = "abc.de";
String quoted = Pattern.quote(str);
System.out.println(quoted);
}
}
Результат выполнения кода:
"\Qabc.de\E"
Пример
Давайте найдем строку с точкой в тексте,
используя quote для безопасного поиска:
import java.util.regex.Pattern;
import java.util.regex.Matcher;
public class Main
{
public static void main(String[] args)
{
String text = "abc.de abcXde";
String search = "abc.de";
Pattern pattern = Pattern.compile(Pattern.quote(search));
Matcher matcher = pattern.matcher(text);
while (matcher.find())
{
System.out.println(matcher.group());
}
}
}
Результат выполнения кода:
"abc.de"
Пример
Давайте сравним поведение с quote и без него
при поиске строки со звездочкой:
import java.util.regex.Pattern;
import java.util.regex.Matcher;
public class Main
{
public static void main(String[] args)
{
String text = "ab*cd abbbcd";
Pattern p1 = Pattern.compile("ab*cd");
Matcher m1 = p1.matcher(text);
System.out.println("Without quote:");
while (m1.find())
{
System.out.println(m1.group());
}
Pattern p2 = Pattern.compile(Pattern.quote("ab*cd"));
Matcher m2 = p2.matcher(text);
System.out.println("With quote:");
while (m2.find())
{
System.out.println(m2.group());
}
}
}
Результат выполнения кода:
Without quote:
"ab*cd"
"abbbcd"
With quote:
"ab*cd"