Регулярные выражения

Matcher представляет собой класс, из которого создаётся объект для поиска совпадений по шаблону. Matcher — это «поисковик», «движок» регулярных выражений. Для поиска ему надо дать:

  • Шаблон поиска
  • «Адрес», по которому искать

Для создания объекта Matcher предусмотрен следующий метод в классе Pattern :

рublic Matcher matcher(CharSequence input);

В качестве аргумента метод принимает последовательность символов для поиска. Это объекты классов — реализаций интерфейса CharSequence :

  • String
  • StringBuilder
  • StringBuffer
  • CharBuffer
  • Segment

Пример создания Matcher-а :

Pattern p = Pattern.compile("a*b");// скомпилировали регулярное выражение в представление
Matcher m = p.matcher("aaaaab");//создали поисковик в тексте “aaaaab” по шаблону "a*b"

Теперь с помощью «поисковика» можно искать совпадения, узнавать позицию совпадения в тексте, заменять текст с помощью методов класса.

Методы класса Matcher :

  • boolean find() — ищет очередное совпадение в тексте с шаблоном. С помощью этого метода и оператора цикла можно производить анализ всего текста по событийной модели (осуществлять необходимые операции при наступлении события – нахождении совпадения в тексте)
  • int start() — номер первого символа очередного совпадения в тексте
  • int end() — номер последнего символа очередного совпадения в тексте
  • String replaceFirst(String replacement) — замена первого совпадения в тексте с шаблоном на replacement
  • String replaceAll(String replacement) — замена всех совпадений в тексте с шаблоном на replacement

Пример кода :

public static void main(String[] args) {
    String text = "Егор Алла Анна";
    Pattern pattern = Pattern.compile("А.+?а");

    Matcher matcher = pattern.matcher(text);
    while (matcher.find()) {
        int start=matcher.start();
        int end=matcher.end();
        System.out.println("Найдено совпадение " + text.substring(start,end) + " с "+ start + " по " + (end-1) + " позицию");
    }
    System.out.println(matcher.replaceFirst("Ира"));
    System.out.println(matcher.replaceAll("Ольга"));
    System.out.println(text);
}

Вывод программы:

Найдено совпадение Алла с 5 по 8 позицию

Найдено совпадение Анна с 10 по 13 позицию

Егор Ира Анна

Егор Ольга Ольга

Егор Алла Анна

Из примера видно, что методы replaceFirst и replaceAll создают новый объект String – строку, представляющую собой исходный текст, в котором совпадения с шаблоном заменены на текст, переданный методу в качестве аргумента. Причём метод replaceFirst заменяет только первое совпадение, а replaceAll – все совпадения в тесте. Исходный текст остается без изменений.

Использование других методов класса Matcher, а также примеры регулярных выражений можно посмотреть в этом цикле статей. Наиболее частые операции с регулярными выражениями при работе с текстом из классов Pattern и Matcher встроены в класс String. Это такие методы как split, matches, replaceFirst, replaceAll. Но на самом деле «под капотом» они используют классы Pattern и Matcher. Поэтому, если вам нужно заменить текст или сравнить строки в программе без написания лишнего кода, можно использовать методы класса String. Если же нужны расширенные возможности – пригодятся классы Pattern и Matcher.

Назад Вперед

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *