Работа с регулярными выражениями в Java

В Java SE имеется полная поддержка регулярных выражений (поиск соответствий, замена, разделение). Инструментарий для работы с ними собран в пакете java.util.regex.

Применение регулярных выражений в Java имеет ряд характерных особенностей по сравнению с той программной логикой, которая используется ы рассмотренных ранее Delphi и C#.

Создание объекта для обработки регулярного выражения

Для обработки регулярных выражений служит класс Pattern. Объект этого класса можно получить при помощи статического метода compile принимающего в качестве параметра строку с регулярным выражением.

Ниже приведён пример создание объекта класса Pattern для работы с регулярным выражением для определения почтового индекса.

После создания объекта регулярное выражение для него изменить невозможно. Для работы с другим регулярным выражением потребуется создавать новый объект класса Pattern.

Поиск соответствий

Результат поиска соответствий регулярному выражению представлен в виде экземпляра класса Matcher.

Для того чтобы его получить необходимо воспользоваться методом matcher класса Pattern. Этот метод принимает в качестве параметра анализируемую строку.

В отличие от Delphi и C#, в Java отсутствует как поиск одиночного соответствия регулярному выражению, так и поиск по умолчанию первого соответствия от начала анализируемой строки, если соответствий несколько.

Для всех случаев используется единый механизм.

Поиск первого соответствия от начала текста в Java выполняется следующим образом. Проверяется значение метода find объекта Matcher и если оно равно true (есть хотя бы одно соответствие) при помощи метода group этого же объекта извлекается сам найденный фрагмент

Если заменить условный оператор на цикл, можно извлечь все соответствия:

Метод find можно также использовать для проверки самого существования соответствий в качестве аналога IsMatch из Delphi и C#.

Замена фрагментов текста по регулярному выражению

Для замены по регулярному выражению в Java также используется описанный ранее объект Matcher.

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

Для замены всех соответствий используется метод replaceAll

Например. Необходимо удалить из текста все почтовые индексы, заменив их фразой «<здесь был почтовый индекс>».

Если требуется заменить текст только для первого соответствия, используется метод replaceFirst.

Разделение строк по регулярному выражению

Эта операция единственная операция, которая выполняется в практически  полной аналогии с  Delphi и C#.

Для того чтобы разделить исходную строку на массив подстрок по позициям соответствующим регулярному выражению используется метод Split класса Pattern. Его наиболее часто используемая перегрузка принимает единственный параметр – анализируемую строку.

В результате его работы будет возвращён массив строк в формате String[].

Безусловно, в своём развитии Java следует по большей части собственному пути. Но, тем не менее, работа с регулярными выражениями в Java не представляет особой сложности. Нужно просто знать особенности её реализации и научиться ей пользоваться.

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

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