Студопедия

Главная страница Случайная страница

Разделы сайта

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






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






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

О каждом соответствии можно получить информацию с помощью класса

java.util.regex.Matcher.

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

Если необходимо, чтобы в строке, проверяемой на соответствие, в какой-либо позиции находился один из символов некоторого символьного набора, то такой набор (класс символов) можно объявить, используя одну из следующих конструкций:

[abc] a, b или c

[^abc] символ, исключая a, b и c

[a-z] символ между a и z

[a-d[m-p]] между a и d, или между m и p

Кроме стандартных классов символов существуют предопределенные классы символов:

. любой символ

\d или \p{Digit} [0-9]

\D [^0-9]

\s или \p{Space} [ \t\n\x0B\f\r]

\S [^\s]

\w [0-9_A-Za-z]

\W [^\w]

\p{Lower} [a-z]

\p{Upper} [A-Z]

\p{Punkt}! " #$%& '()*+, -./:; < =>? @[Ä ]^_`{|}~

\p{Blank} Пробел или табуляция

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

ab после a следует b

a|b a либо b

(a) а

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

a? a один раз или ни разу

a* a ноль или более раз

a+ a один или более раз

a{n} a n раз

a{n, } a n или более раз

a{n, m} a от n до m

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

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

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

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

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

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

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

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

Начальное состояние объекта типа Matcher не определено. Попытка вызвать какой-либо метод класса для извлечения информации о найденном соответствии приведет к возникновению ошибки IllegalStateException. Для того, чтобы начать работу с объектом Matcher, нужно вызвать один из его методов:

boolean matches() — проверяет, соответствует ли вся информация шаблону;

boolean lookingAt() — поиск последовательности символов, начинающейся с начала строки и соответствующей шаблону;

boolean find() или boolean find(int start) — ищет последовательность символов, соответствующих шаблону, в любом месте строки. Параметр start указывает на начальную позицию поиска.

Иногда необходимо сбросить состояние экземпляра Matcher в исходное, для этого применяется метод reset() или reset(CharSequence input), который также устанавливает новую последовательность символов для поиска.

Для замены всех подпоследовательностей символов, удовлетворяющих шаблону, на заданную строку можно применить метод replaceAll(String replacement).

В регулярном выражении для более удобной обработки входной последовательности применяются группы, которые помогают выделить части найденной подпоследовательности. В шаблоне они обозначаются скобками «(» и «)». Номера групп начинаются с единицы. Нулевая группа совпадает со всей найденной подпоследовательностью.

Далее приведены методы для извлечения информации о группах.

String group() — возвращает всю подпоследовательность, удовлетворяющую шаблону;

int start() — возвращает индекс первого символа подпоследовательности, удовлетворяющей шаблону;

int start(int group) — возвращает индекс первого символа указанной группы;

int end() — возвращает индекс последнего символа подпоследовательности, удовлетворяющей шаблону;

int end(int group) — возвращает индекс последнего символа указанной группы;

String group(int group) — возвращает конкретную группу по позиции;

boolean hitEnd() — возвращает истину, если был достигнут конец входной последовательности.

 






© 2023 :: MyLektsii.ru :: Мои Лекции
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав.
Копирование текстов разрешено только с указанием индексируемой ссылки на источник.