Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
7lab.docx
Скачиваний:
39
Добавлен:
12.06.2018
Размер:
58.4 Кб
Скачать

Общие сведения

Регулярные выражения – эта система обработки текста, основанная на специальной системе записи образцов для поиска. Образец (pattern) задаёт правило поиска. Сейчас регулярные выражения используются многими текстовыми редакторами и утилитами для поиска и изменения текста на основе выбранных правил. Язык программирования Java также поддерживает регулярные выражения для работы со строками.

Основными классами для работы с регулярными выражениями являются классы Pattern и Matcher. Эти классы входят в родительский класс java.util.regex, поэтому он должен быть предварительно импортирован в код программы.

Класс Pattern применяется для определения регулярных выражений, для которого ищется соответствие в строке, файле или другом объекте, представляющем собой некоторую последовательность символов. Для определения шаблона применяются специальные синтаксические конструкции. О каждом соответствии можно получить больше информации с помощью класса Matcher. Если в строке, проверяемой на соответствие, необходимо, чтобы в какой-либо позиции находился один из символов некоторого символьного набора (шаблон), то такой набор можно объявить, используя одну из конструкций, представленных в таблице 7.1.

Общий формат класс Pattern выглядит следующим образом:

Pattern <имя переменной> = <метод класса>(“<шаблон поиска>”);

Таблица 7.1 – Способы определения шаблонов символов

Пример конструкции поиска

Описание конструкции поиска

[abc]

поиск символов a, b или c

[^abc]

поиск любых символов кроме a, b и c

[a-z]

поиск любых символов в диапазоне от a до z

[a-d[m-p]]

поиск любых символов между a и d, а также между m и p

[e-z&&[em]]

поиск любых символов в диапазоне от e до z, включая символы е и m

Кроме стандартных шаблонов символов существуют предопределенные шаблоны символов (таблица 7.2)

Таблица 7.2 – Дополнительные способы определения

шаблонов символов

Ключи

Эквивалентная

форма записи

Описание ключа

\d

[0-9]

Цифра от 0 до 9

\D

[^0-9]

Не цифра

\s

[\t\n\x0B\f\r]

Символ пробела

\S

[^ \s]

Не пробельный символ

\w

[a-zA-Z_0-9]

Символ слова/идентификатора

\W

[^\w]

Не символ слова

.

любой символ

Способы задания границ поиска в строке указаны в таблице 7.3.

Таблица 7.3 – Способы задания границ поиска

Ключи

Описание ключа

^

начало строки;

$

конец строки. Если необходимо интерпретировать \n как разделитель строк, шаблон должен быть обозначен как многострочный. Для однострочных шаблонов, аналогично концу ввода;

\b

граница слова;

\B

не граница слова;

\A

начало ввода;

\G

конец предыдущего соответствия. Так поиск по шаблону\Gaпо строкеaabaa выдаст результат на символ b;

\Z

конец ввода для последнего разделителя, если такой есть;

\z

конец ввода;

При создании регулярного выражения могут использоваться логические операции (таблица 7.4).

Таблица 7.4 – Способы задания логических операций

XY

После X следует Y

X|Y

X либо Y

(X)

X

Скобки, кроме их логического назначения, также используются для выделения групп. Для определения регулярных выражений недостаточно одних шаблонов символов, т. к. в шаблоне часто нужно указать количество повторений. Для этого существуют квантификаторы (табл.5).

Квантификатор после символа, символьного шаблона или группы определяет, сколько раз предшествующее выражение может встречаться. Следует учитывать, что квантификатор может относиться более чем к одному символу в регулярном выражении, только если это символьный шаблон или группа.

Таблица 5 – Квантификаторы

X?

X один раз или ни разу

X*

X ноль или более раз

X+

X один или более раз

X{n}

X n раз

X{n,}

X n или более раз

X{n,m}

X от n до m

Существует еще два типа квантификаторов, которые образованы прибавлением суффикса ? (слабое или неполное совпадение) или + («жадное» или собственное совпадение) к вышеперечисленным квантификаторам. Неполное совпадение соответствует выбору с наименее возможным количеством символов, а собственное – с максимально возможным.

Класс Pattern

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

В классе Pattern объявлены следующие методы:

  • compile(String regex) – возвращает Pattern, который соответствует regex;

  • matcher(CharSequence input) – возвращает Matcher, с помощью которого можно находить соответствия в строке input;

  • matches(String regex, CharSequence input) – проверяет на соответствие строки input шаблону regex;

  • pattern() – возвращает строку, соответствующую шаблону;

  • split(CharSequence input) – разбивает строку input, учитывая, что разделителем является шаблон;

  • split(CharSequence input, int limit) – разбивает строку input на не более чем limit частей.

С помощью метода matches() класса Pattern можно проверять на соответствие шаблону целой строки, но если необходимо найти соответствия внутри строки, например, определять участки, которые соответствуют шаблону, то класс Pattern не может быть использован. Для таких операций необходимо использовать класс Matcher.

Соседние файлы в предмете Инфокоммуникационные системы и сети