Regular expressions - регулярные выражения (Java)

Содержание

Слайд 2

Определение Формальный язык поиска и осуществления манипуляций с подстроками в тексте.

Определение

Формальный язык поиска и осуществления манипуляций с подстроками в тексте.
Основан на

использовании метасимволов.

Kolesnikov D.O. SED KNURE

Слайд 3

Символы x ==> символ x \\ ==> обратный слеш \xhh ==>

Символы

x ==> символ x
\\ ==> обратный слеш
\xhh ==> символ с кодом U+00hh
\xhhhh ==> символ с кодом U+hhhh
\n ==> перевод строки
\r ==> возврат каретки
\t ==> табуляция

Kolesnikov

D.O. SED KNURE
Слайд 4

Символьные классы Простой класс: [abc] ==> a, b или c Регулярное

Символьные классы

Простой класс:
[abc] ==> a, b или c
Регулярное выражение: [ab]
Входная строка: accddba

Kolesnikov D.O.

SED KNURE
Слайд 5

Символьные классы Отрицание: [^abc] ==> любой символ, кроме a, b, c

Символьные классы

Отрицание:
[^abc] ==> любой символ, кроме a, b, c
Регулярное выражение: [^ab]
Входная строка: acdba

Kolesnikov

D.O. SED KNURE
Слайд 6

Символьные классы Диапазон: [a-zA-Z] ==> от a до z или от

Символьные классы

Диапазон:
[a-zA-Z] ==> от a до z или от A до Z
Регулярное выражение:

[a-cA-Z]
Входная строка: adAcdh

Kolesnikov D.O. SED KNURE

Слайд 7

Символьные классы Объединение: [a-z[A-Z]] ==> от a до z или от

Символьные классы

Объединение:
[a-z[A-Z]] ==> от a до z или от A до Z
Тоже самое,

что и [a-zA-Z]

Kolesnikov D.O. SED KNURE

Слайд 8

Символьные классы Пересечение: [a-z&&[def]] ==> d, e или f Регулярное выражение:

Символьные классы

Пересечение:
[a-z&&[def]] ==> d, e или f
Регулярное выражение: [a-d&&c-f]
Входная строка: accdddeab

Kolesnikov D.O. SED

KNURE
Слайд 9

Символьные классы Вычитание: [a-z&&[^def]] ==> от a до c или от

Символьные классы

Вычитание:
[a-z&&[^def]] ==> от a до c или от g до z
Регулярное выражение:

[a-d&&[^c-f]]
Входная строка: accdddeab

Kolesnikov D.O. SED KNURE

Слайд 10

Символьные классы Java Эквиваленты методов класса Character: \p{javaLowerCase} ~ isLowerCase \p{javaUpperCase}

Символьные классы Java

Эквиваленты методов класса Character:
\p{javaLowerCase} ~ isLowerCase
\p{javaUpperCase} ~ isUpperCase
\p{javaWhitespace} ~ isWhitespace
Регулярное выражение:
\p{javaUpperCase} \p{javaLowerCase}
Входная строка: Текст

Kolesnikov

D.O. SED KNURE
Слайд 11

Предопределенные классы . ==> любой символ Регулярное выражение: ... Входная строка:

Предопределенные классы

. ==> любой символ
Регулярное выражение: ...
Входная строка: abcdefgh
Регулярное выражение: ..
Входная строка: abcde

Kolesnikov

D.O. SED KNURE
Слайд 12

Предопределенные классы \d ==> цифра, [0-9] \D ==> не цифра, [^\d]

Предопределенные классы

\d ==> цифра, [0-9]
\D ==> не цифра, [^\d]
Регулярное выражение: \d\D
Входная строка: ab8ab8

Kolesnikov D.O. SED

KNURE
Слайд 13

Предопределенные классы \s ==> пробельный символ, [ \t\n\f\r\x0b] \S ==> непробельный

Предопределенные классы

\s ==> пробельный символ, [ \t\n\f\r\x0b]
\S ==> непробельный символ, [^\s]
Регулярное выражение: \s\S
Входная строка: ab

8 ab8

Kolesnikov D.O. SED KNURE

Слайд 14

Предопределенные классы \w ==> символ слова, [a-zA-Z_\d] \W ==> отрицание \w,

Предопределенные классы

\w ==> символ слова, [a-zA-Z_\d]
\W ==> отрицание \w, [^\w]
Регулярное выражение: \w\W
Входная строка: ab*8&ab8

Kolesnikov D.O.

SED KNURE
Слайд 15

Границы ^ ==> начало строки Регулярное выражение: ^ab Входная строка: ababab

Границы

^ ==> начало строки
Регулярное выражение: ^ab
Входная строка: ababab
$ ==> конец строки
Регулярное выражение: ab$
Входная строка: ababab

Kolesnikov

D.O. SED KNURE
Слайд 16

Границы \b ==> граница слова \B ==> отрицание \b Регулярное выражение:

Границы

\b ==> граница слова
\B ==> отрицание \b
Регулярное выражение: abc\b
Входная строка: abc abcd

Kolesnikov D.O. SED KNURE

Слайд 17

Границы \A ==> начало ввода Регулярное выражение: \Aabc Входная строка: abc

Границы

\A ==> начало ввода
Регулярное выражение: \Aabc
Входная строка:
abc abc
abc abc

Kolesnikov D.O. SED KNURE

Слайд 18

Границы \z ==> конец ввода Регулярное выражение: abc\z Входная строка: abc

Границы

\z ==> конец ввода
Регулярное выражение: abc\z
Входная строка:
abc abc
abc abc

Kolesnikov D.O. SED KNURE

Слайд 19

Границы \Z ==> конец ввода, как и \z, но может включать

Границы

\Z ==> конец ввода, как и \z, но может включать ограничитель строки
Регулярное выражение:

abc\Z
Входная строка:
abc abc
abc abc<ограничитель строки>

Kolesnikov D.O. SED KNURE

Слайд 20

Ограничители строк '\n' ==> LF (новая строка) '\r' ==> CR (возврат

Ограничители строк

'\n' ==> LF (новая строка)
'\r' ==> CR (возврат каретки)
"\r\n" ==> CR+LF
'\u0085' ==> следующая строка
'\u2028' ==> разделитель строки
'\u2029' ==> разделитель параграфа

Kolesnikov D.O. SED

KNURE
Слайд 21

Квантификаторы Квантификатор определяет повторяемость. Жадный квантификатор определяет максимально возможную подстроку. Ленивый

Квантификаторы

Квантификатор определяет повторяемость.
Жадный квантификатор определяет максимально возможную подстроку.
Ленивый квантификатор определяет минимально

возможную подстроку.

Kolesnikov D.O. SED KNURE

Слайд 22

Квантификаторы X? ==> один или ноль раз (жадный) Регулярное выражение: ab?

Квантификаторы

X? ==> один или ноль раз (жадный)
Регулярное выражение: ab?
Входная строка: aabcabbb
X?? ==> один или ноль

раз (ленивый)
Регулярное выражение: ab??
Входная строка: aabcabbb

Kolesnikov D.O. SED KNURE

Слайд 23

Квантификаторы X* ==> ноль или более раз (жадный) Регулярное выражение: ab*

Квантификаторы

X* ==> ноль или более раз (жадный)
Регулярное выражение: ab*
Входная строка: aabcabbb
X*? ==> ноль или более

раз (ленивый)
Регулярное выражение: ab*?
Входная строка: aabcabbb

Kolesnikov D.O. SED KNURE

Слайд 24

Квантификаторы X+ ==> один или более раз (жадный) Регулярное выражение: ab+

Квантификаторы

X+ ==> один или более раз (жадный)
Регулярное выражение: ab+
Входная строка: aabcabbb
X+? ==> один или более

раз (ленивый)
Регулярное выражение: ab+?
Входная строка: aabcabbb

Kolesnikov D.O. SED KNURE

Слайд 25

Квантификаторы X{n} ==> ровно n раз (жадный) или (совпадает по результату

Квантификаторы

X{n} ==> ровно n раз (жадный)
или (совпадает по результату применения)
X{n}? ==> ровно n раз (ленивый)
Регулярное

выражение: ab{2} или ab{2}?
Входная строка: aabcabbb

Kolesnikov D.O. SED KNURE

Слайд 26

Квантификаторы X{n,} ==> не менее n раз (жадный) Регулярное выражение: ab{2,}

Квантификаторы

X{n,} ==> не менее n раз (жадный)
Регулярное выражение: ab{2,}
Входная строка: aabcabbb
X{n,}? ==> не менее n

раз (ленивый)
Регулярное выражение: ab{2,}?
Входная строка: aabcabbb

Kolesnikov D.O. SED KNURE

Слайд 27

Квантификаторы X{n,m} ==> от n до m раз (жадный) Регулярное выражение:

Квантификаторы

X{n,m} ==> от n до m раз (жадный)
Регулярное выражение: ab{1,2}
Входная строка: aabcabbb
X{n,m}? ==> от n

до m раз (ленивый)
Регулярное выражение: ab{1,2}?
Входная строка: aabcabbb

Kolesnikov D.O. SED KNURE

Слайд 28

Сверхжадные квантификаторы При поиске в строке aab с помощью рег. выражения

Сверхжадные квантификаторы

При поиске в строке aab с помощью рег. выражения a+b

шаги анализатора:
a+ ==> a (соответствует)
a+ ==> aa (соответствует)
a+ ==> aab (не соответствует)
откат назад (возврат b) к последнему соответствию (aa) и проверка a+b:
a+b ==> aab (соответствует)

Kolesnikov D.O. SED KNURE

Слайд 29

Сверхжадные квантификаторы Сверхжадный квантификатор действует как жадный, но никогда не откатывается

Сверхжадные квантификаторы

Сверхжадный квантификатор действует как жадный, но никогда не откатывается назад.
a++ ==> a

(соответствует)
a++ ==> aa (соответствует)
a++ ==> aab (не соответствует)
Последний символ ввода (b) прочтен, соответствие не найдено.

Kolesnikov D.O. SED KNURE

Слайд 30

Сверхжадные квантификаторы Чтобы сделать жадный квантификатор сверхжадным достаточно добавить + справа

Сверхжадные квантификаторы

Чтобы сделать жадный квантификатор сверхжадным достаточно добавить + справа от

квантификатора:
X? ==> X?+ X{n} ==> X{n}+
X* ==> X*+ X{n,} ==> X{n,}+
X+ ==> X++ X{n,m} ==> X{n,m}+
Сверхжадные квантификаторы работают как правило быстрее, чем жадные.

Kolesnikov D.O. SED KNURE

Слайд 31

Логические операции XY ==> X за которым следует Y (AND) X|Y

Логические операции

XY ==> X за которым следует Y (AND)
X|Y ==> X илиY (OR)
Приоритет AND выше

чем OR.
Регулярное выражение: aa|b
Входная строка: aabcabbb

Kolesnikov D.O. SED KNURE

Слайд 32

Группы Выражение в круглых скобка - группа. Каждая группа имеет номер.

Группы

Выражение в круглых скобка - группа.
Каждая группа имеет номер.
Группы нумеруются слева

направо, начиная с единицы (номер может быть больше 9)
Чтобы группа не нумеровалась, она должна начинаться с (?:

Kolesnikov D.O. SED KNURE

Слайд 33

Группы (A)(B(C)(?:D)) (A) ==> группа номер 1 (B(C)(?:D)) ==> группа номер

Группы

(A)(B(C)(?:D))
(A) ==> группа номер 1
(B(C)(?:D)) ==> группа номер 2
(C) ==> группа номер 3
(?:D) ==> группа без номера

Kolesnikov D.O. SED

KNURE
Слайд 34

Группы Группы могут быть использованы по номеру в регулярном выражении с

Группы

Группы могут быть использованы по номеру в регулярном выражении с помощью

синтаксиса: \НОМЕР_ГРУППЫ
Регулярное выражение: (aab)\W\1
Входная строка: aab aab

Kolesnikov D.O. SED KNURE

Слайд 35

Экранирование символов Для представления специальных символов: \ . | + *

Экранирование символов

Для представления специальных символов:
\ . | + * ?
[ ]

( ) { }
^ $
используют экранирование с помощью обратного слеша:
\\ \. \\ \+ \* \?
\[ \] \( \) \{ \}
\^ \$

Kolesnikov D.O. SED KNURE

Слайд 36

Экранирование символов Для указания диапазона экранирования можно использовать \Q и/или \E

Экранирование символов

Для указания диапазона экранирования можно использовать \Q и/или \E
\Q ==> начало диапазона
\E ==> окончание

диапазона
Регулярное выражение: \Q\(*\E(a)\1
Входная строка: ab\(*aa

Kolesnikov D.O. SED KNURE

Слайд 37

Упреждающий просмотр вперед Позитивный: (?=X) Регулярное выражение: a(?=b) Входная строка: abacab

Упреждающий просмотр вперед

Позитивный: (?=X)
Регулярное выражение: a(?=b)
Входная строка: abacab
Негативный: (?!X)
Регулярное выражение: a(?!b)
Входная

строка: abacab

Kolesnikov D.O. SED KNURE

Слайд 38

Просмотр назад Позитивный: (? Регулярное выражение: (? Входная строка: abacab Негативный:

Просмотр назад

Позитивный: (?<=X)
Регулярное выражение: (?<=b)a
Входная строка: abacab
Негативный: (?Регулярное выражение: (?Входная

строка: abacab

Kolesnikov D.O. SED KNURE

Слайд 39

Режимы Влияют на работу регулярных выражений. Каждый режим имеет буквенный код.

Режимы

Влияют на работу регулярных выражений.
Каждый режим имеет буквенный код.
COMMENTS ==> x
CASE_INSENSITIVE ==> i
UNIX_LINES ==> d
DOTALL ==> s
UNICODE_CASE ==> u
MULTILINE ==> m

Kolesnikov D.O.

SED KNURE
Слайд 40

Режимы Чтобы включить режим, достаточно предварить регулярное выражение комбинацией: (?КОД_РЕЖИМА). (?m)

Режимы

Чтобы включить режим, достаточно предварить регулярное выражение комбинацией: (?КОД_РЕЖИМА).
(?m) (?s)
Если нужно включить

сразу несколько режимов, можно писать несколько кодов:
(?iu)

Kolesnikov D.O. SED KNURE

Слайд 41

Режимы COMMENTS ==> x Режим комментариев. Пробельные символы игнорируются, после символа

Режимы

COMMENTS ==> x
Режим комментариев. Пробельные символы игнорируются, после символа # можно писать комментарий

к рег. выражению.
Регулярное выражение: (?x)a bc #comment
Входная строка: abcab

Kolesnikov D.O. SED KNURE

Слайд 42

Режимы CASE_INSENSITIVE ==> i Игнорирует регистр символов. UNIX_LINES ==> d Разделитель

Режимы

CASE_INSENSITIVE ==> i
Игнорирует регистр символов.
UNIX_LINES ==> d
Разделитель строк только CR (\r)
DOTALL ==> s
Точка (.)

может включать \n

Kolesnikov D.O. SED KNURE