Регулярные выражения Степулёнок Денис Олегович Теория Синтаксис регулярных выражений

advertisement
Регулярные выражения
1.
2.
3.
Теория
Синтаксис регулярных выражений
Примеры реализации на Java + Python
Степулёнок Денис Олегович
Регулярное выражение
Regular Expressions - формальный
язык поиска (и замены) подстрок в
тексте, основанный на использовании
метасимволов (wildcard characters).
 RegExp - строка-образец (pattern,
«шаблон», «маска»), состоящая из
символов и метасимволов и задающая
правило поиска.

Зачем?
Регулярные выражения нужны для
обработки текста и позволяют:
 Эффективный по времени и памяти
поиск в тексте по заданному шаблону
 Замену и удаление подстрок по
шаблону (в редакторе, например)
 Разделить текст на части
 Выбрать из текста необходимые
фрагменты
Применение
• Разбор логов/вебстраниц/конфигов
• Преобразование форматов текста
• Анализ входных данных
Конечный автомат
Конечный автомат — абстрактный автомат, число возможных
состояний которого конечно. Результат работы автомата определяется
по его конечному состоянию.
Диаграмма состояний
Граф переходов
Синтаксис RegExp (язык)
PCRE
(Perl Compatible Regular Expressions)
регулярные выражения совместимые с Perl
Обычный символ – представляет в
выражении сам себя (можно искать строки
«как обычно»)
 Метасимволы:
◦ Классы символов
◦ Квантификаторы

JavaFX
Java: пакет java.util.regex
Класс Pattern:
скомпилированное регулярное
выражение
 Класс Matcher: поиска и
замена текста по регулярному
выражению
 Класс PatternSyntaxException
- ошибка

Реализация в Intellij Idea ->…
Шаблон телефона
Квантификатор
\d+-\d+-\d+
Любая
цифра
231-32-33
345-34-54
233-12-34
Метасимволы
\ – экранирование символов
 . (точка) – любой символ
 [...] – набор символов (любой
символ из набора)
 [^aodsfi] – отрицание наборов
символов
 () – группа (может быть несколько)
 \n – обратная ссылка на группу,
например: \1, \2.

Классы символов




\d - [0-9] - Цифровой символ
\D - [^0-9] - Нецифровой символ
\s - [ \f\n\r\t\v] - Пробельный символ
\S - [^ \f\n\r\t\v] - Непробельный
символ

\w - Буквенный или цифровой символ
или знак подчёркивания

\W - Любой символ, кроме буквенного
или цифрового символа или знака
подчёркивания
Квантификация
(поиск последовательностей)
Квантификатор после символа, символьного класса или
группы определяет, сколько раз предшествующее выражение
может встречаться. Следует учитывать, что квантификатор
может относиться более чем к одному символу в регулярном
выражении, только если это символьный класс или группа.
Представление
Число
повторений
Пример
Соответствие
{n}
Ровно n раз
colou{3}r
colouuur
{m,n}
От m до n вкл
ючительно
colou{2,4}r
colouur, colouuu
r, colouuuur
{m,}
Не менее m
colou{2,}r
colouur, colouuu
r, colouuuur и т.
д.
{,n}
Не более n
colou{,3}r
color, colour, col
ouur, colouuur
Если символы { } не образуют квантификатор, их
специальное значение игнорируется.
Квантификация: ? * +
Представлен
ие
Число
повторений
?
Ноль или
одно
{0,1}
colou?r
color, colour
*
Ноль или
более
{0,}
colou*r
color, colour, c
olouur и т. д.
+
Одно или
более
{1,}
colou+r
colour, colouu
r и т. д. (но
не color)
Эквивалент
Пример
Соответстви
е
Часто используется последовательность .* для обозначения
любого количества любых символов между двумя частями
регулярного выражения.
Позиция внутри строки
Представление
^
$
\b
\B
\G
Позиция
Пример
Соответствие
Начало строки
^a
(или текста при
модификаторе ?m)
aaa aaa
Конец строки (или a$
текста при
модификаторе ?m)
aaa aaa
a\b
aaa aaa
\ba
aaa aaa
Не граница слова
\Ba\B
aaa aaa
Предыдущий
успешный поиск
\Ga
aaa aaa (поиск
остановился на 4-й
позиции — там, где не
нашлось a)
Граница слова
Якоря - позиция внутри строки
^ – начало строки
 Конец строки – $
 Точное совпадение – ^слово$

Группы
Группировка – (текст)
 Незахватывающие группы –
(?:выражение)

Python 3

Используем библиотеку регулярных
выражений re: import re
Поиск телефонов в тексте
Поиск всех вхождений >> список
Проверка e-mail
^([a-z0-9_-]+\.)*[a-z0-9_-]+@[a-z09_-]+(\.[a-z0-9_-]+)*\.[a-z]{2,6}$
 Стандарт (RFC):
http://www.ietf.org/rfc/rfc0822.txt?n
umber=822
 Полная проверка по RFC:
http://www.ex-parrot.com/pdw/MailRFC822-Address.html

Использование в редакторе

Ctrl-R в Intellij Idea / PyCharm / других
редакторах
С++ / Qt
http://qt-project.org/doc/qt-5/QRegExp.html
Класс QRegExp
Qt QRegExp использование
Online проверка регулярных
выражений

http://www.pcre.ru/eval/
Ссылки
 http://www.pcre.ru/
- сайт о PCRE
регулярных выражениях
 http://ru.wikipedia.org/wiki/Регулярн
ые_выражения - Википедия
 http://ru.wikibooks.org/wiki
Регулярные_выражения Викиучебник
Download