
- •По курсу «Интернет-программирование»
- •Принципы работы регулярных выражений
- •История развития регулярных выражений
- •Принципы регулярных выражений
- •Конструкции шаблонов регулярных выражений
- •Классы символов (диапазоны)
- •Квантификаторы (повторения)
- •Граничные метасимволы
- •Перечисления
- •Группировки
- •Утверждения
- •Условные подвыражения
- •Реализация регулярных выражений в языках программирования
- •Примеры
ЛАБОРАТОРНАЯ РАБОТА №5
По курсу «Интернет-программирование»
Регулярные выражения
Цель работы.
Ознакомиться со способами обработки текстов с помощью механизма регулярных выражений.
Приобретаемые компетенции:
Понимание принципов работы регулярных выражений.
Обработка текстовых данных с помощью регулярных выражений
Принципы работы регулярных выражений
История развития регулярных выражений
Регулярные выражения – это специальные правила создания шаблонов обработки строк. Шаблоны регулярных выражений позволяют производить сложный поиск (единичный и групповой) и замену подстрок. Исторически впервые регулярные выражения появились в UNIX в формате BRE POSIX UNIX (BRE — Basic Regular Expressions). Этот формат затем был расширен до ERE POSIX UNIX (ERE — Extended Regular Expressions) с добавлением новых возможностей. В 1997 году формат был расширен до
PCRE - (Perl Compatible Regular Expressions см. https://ru.wikipedia.org/wiki/PCRE ) и это формат на сегодня считается самым развитым и на него ориентируются разработчики языков программирования при внедрении поддержки регулярных выражений в соответствующие языки.
Принципы регулярных выражений
При работе регулярного выражения, заданный в нем шаблон сопоставляется со строкой текста и при совпадении из строки извлекаются и/или заменяются совпавшие фрагменты.
Для создания шаблонов используют метасиволы, которые обрабатываются не как обычные символы строки, а специальным образом.
Например, применение шаблона вида ([0-9]+) к строке we435we вернет 435 т. к. конструкция ([0-9]+) “в переводе” означает - взять только подряд идущие числа.
Общее число метасимволов — невелико: .([{\^-$|]})?*+
Однако, их комбинации позволяют создавать очень сложные шаблоны.
Если в строке требуется найти символы, совпадающие с метасимволами, то применяется экранирование метасимволов по одному из двух способов:
1. Использовать обратную косую черту перед символом. Например \. обозначает точку.
2. Заключить символы между \Q и \E
Конструкции шаблонов регулярных выражений
Классы символов (диапазоны)
Класс символов – набор символов в [ ], определяющий сопоставление одного символа в интерпретируемой строке.
Классы символов Таблица 1
[abc] |
a, b или c (простой класс) |
[^abc] |
Любой символ кроме a,b или с (отрицание) |
[a-z] |
все символы от а до z (диапазон) |
[a-d[m-p]] |
все символы от a до d и от m до p (объединение). Аналогично [a-dm-p] |
[a-z&&[def]] |
d,e или f (пересечение) |
[a-z&&[^bc]] |
от a до z кроме b и c (вычитание). Аналогично [ad-z] |
[a-z&&[^m-p]] |
от a до z и не от m до p (вычитание). Аналогично [a-lq-z] |
Предопределенные классы - короткая запись часто употребляемых классов символов.
Предопределенные классы Таблица 2
. |
Любой символ |
\d |
Цифра, [0-9] |
\D |
Не цифра, [^0-9] |
\s |
Пробельный символ, [ \t\n\x0B\f\r] |
\S |
Не пробельный символ, [^\s] |
\w |
Символ слова [a-zA-Z_0-9] |
\W |
Не символ слова [^\w] |
Примеры использования классов символов
шаблон a[b-z]\s
строка ab ac aa ad
Найден текст ab позиция старта 0 позиция окончания 3
Найден текст ac позиция старта 3 позиция окончания 6
шаблон [a-z&&[def]]
строка abc abcd cdef
Найден текст d позиция старта 7 позиция окончания 8
Найден текст d позиция старта 10 позиция окончания 11
Найден текст e позиция старта 11 позиция окончания 12
Найден текст f позиция старта 12 позиция окончания 13
шаблон [a-z&&[^bc]]+\s
строка abc aef zcz uee
Найден текст aef позиция старта 4 позиция окончания 8
Найден текст z позиция старта 10 позиция окончания 12