В Java имеется пакет java.util.regex, который обеспечивает возможность создания шаблонов с регулярными выражениями.

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

В этом уроке будет рассказано о регулярных выражениях (regular expressions) Java и будут даны примеры их применения, которые просты для понимания и использования.

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

Регулярное выражение — это специальная последовательность знаков и символов (метасимволов — wildcard characters) которая используется как шаблон или маска (pattern) для поиска определенного текста либо сопоставления и нахождения строк или набора строк. То есть шаблон задает набор правил, которому должен соответствовать текст. Регулярные выражения были разработаны создателями языка C и впервые реализованы в библиотеке языка Perl. В дальнейшем они были представлены во многих других языках, так как являются очень удобным инструментом для работы с текстовыми данными. Регулярные выражения могут быть использованы для поиска, анализа, редактирования, манипуляции и изменения текстовых данных.

Пакет java.util.regex

Пакет java.util.regex состоит из трех основных классов:

    • Класс шаблона (Pattern Class) − это скомпилированное представление регулярного выражения. Для создания шаблона необходимо вызвать один из публичных статичных методов  compile(), в который передается регулярное выражение и который возвращает в результате выполнения объект — шаблон.
    • Класс соответствия (Matcher Class) − инструмент для выполнений операций “соответствия” над последовательностью символов с использованием шаблона. Вызывается методом matcher() из объекта шаблона (Pattern).
    • Исключения синтаксиса шаблона (PatternSyntaxException) − возвращает исключения при наличии непредвиденных ошибок в регулярном выражении.

[includeme post_id=»4299″]

Capturing Groups или группы захвата

Необходимы для обеспечения интерпретации группы символов как одного элемента. Для этого несколько символов заключается в скобки. К примеру (tech).

Нумерация

В выражении ((A)(B(C))) всего 4 пары открывающихся и закрывающихся скобок, соответсвенно четыре группы 

  1. ((A)(B(C)))
  2. (A)
  3. (B(C))
  4. (C)

Для подсчета количества групп можно вызвать метод groupCount() на объекте matcher, который возвратит целое число int. Также имеется группа под номером 0, которая возвращает значение регулярного выражения целиком.

Обратные ссылки (Backreferences)

С помощью backreferences можно повторно обратиться к ранее найденным секциям текста, которые соответствуют определенной группе. Обозначается обратным слэшем с указанием номера группы, которая была вызвана. Например \2 ссылается на значение текста, которое вернула группа (A) для вышеприведенного примера.

Пример

Результат выполнения:

В примере используется обратная ссылка \2 на текст второй группы sunflowers in
[includeme post_id=»4299″]

Синтаксис регулярных выражений

В таблице приведены метасимволы для регулярных выражений Java

Значение Описание
^ Соответствие началу строки
$ Соответствие концу строки
. Соответствие любому одиночному символу, кроме символа новой строки. Для соответствия новой строки достаточно добавить m
[…] Соответствие любому одиночному символу в скобках
[^…] Соответствие любому одиночному символу, не заключенному в скобки
\A Начало всей строки
\z Конец всей строки
\Z Конец всей строки за исключением последнего ограничителя строки
re* Соответствие любого количества экземпляров элемента (может быть и нулевое)
re+ Соответствие одного или более экземпляров предыдущего элемента
re? Означает, что символ или выражение является необязательным
re{ n} Соответствие n-ому количеству указанного выражения
re{ n,} Соответствие n-ому количеству или более указанного выражения
re{ n, m} Соответствие не менее n-ому и не более m-ому количеству указанного выражения
a| b Соответствие a или b. Оператор ИЛИ
(re) Группирует регулярные выражения и сохраняет в памяти найденные значения
(?: re) Группирует регулярные выражения без сохранения в памяти найденного текста (группа без захвата)
(?> re) Независимая группа без захвата
\w Соответствие буквенным символам. Эквивалент [a-zA-Z_0-9]
\W Соответствие не буквенным символам. Эквивалент [^\w]
\s Соответствие символам новой строки. Эквивалент [\t\n\r\f].
\S Соответствие символам не новой строки. Эквивалент [^\s]
\d Соответствие цифрам. Эквивалент [0-9].
\D Соответствие не цифрам. Эквивалент [^0-9]
\A Соответствие началу строки
\Z Соответствие концу строки, без включения символов новой строки
\z Соответствие концу строки
\G Соответствует концу предыдущего совпадения
\n Обратная ссылка backreference для захвата группы «n».
\b Соответсвует границе слова когда за скобками и совпадение символа backspace (0x08) когда внутри скобок.
\B Соответсвует не границе слова
\n, \t, etc. Соответсвует новой строке newlines, возврату каретки carriage returns, табуляции tabs и так далее.
\Q Пропустить все символы до \E.
\E Заканчивает цитирование начатое с \Q.

Заметка:
Метасимволы обозначаются первой буквой их представления. Например, цифра (Digit), пробел (Space), слово (Word), and граница(Boundary). Символы с верхним регистром определяют противоположное значение «НЕ».

Методы класса соответствия (Matcher Class methods)

Методы индексирования (Index Methods)

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

Метод Описание
public int start() Возвращает начальный индекс предыдущего совпадения
public int start(int group) Возврщает начальный индекс подстроки, захваченной данной группой при предыдущей операции поиска совпадения
public int end() Возвращает смещение после последнего совпадающего регулярному выражению символа
public int end(int group) Возвращает смещение после последнего символа совпадающей последовательности захваченной группой в результате предыдущей операции нахождения совпадения (match operation).

Методы обучения (Study Methods)

Представленные методы рассматривают входящий текст и возвращают логическое значение boolean определяющее был ли найден шаблон или нет

Метод Описание
public boolean lookingAt() Пытается найти совпадение шаблону входящей последовательности, начиная с начала
public boolean find() Пытается найти последующие совпадения шаблону входящей последовательности
public boolean find(int start) Сбрасывает matcher и затем пытается найти совпадение начиная с заданного индекса
public boolean matches() Пытается определить совпадение всей заданной последовательности

Методы замещения (Replacement Methods)

Представленные методы удобны для замены текста во входящей строке

Метод Описание
public Matcher appendReplacement(StringBuffer sb, String replacement) Реализует нетерминальные замену и присоединение
public StringBuffer appendTail(StringBuffer sb) Реализует терминальные замену и присоединение
public String replaceAll(String replacement) Заменяет каждое совпадение на заданную строку
public String replaceFirst(String replacement) Заменяет первое совпадение на заданную строку
public static String quoteReplacement(String s) Производит строчную замену String для указанной строки.

One thought on “Java — Регулярные выражения”

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

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