
- •Интернет-программирование
- •ИП. РВ. Спецификации
- •ИП. РВ. Понятия
- •ИП. РВ. Подключение
- •ИП. РВ. Тестирование
- •ИП. РВ. Устройство шаблонов
- •ИП. РВ. Устройство шаблонов
- •ИП. РВ. Устройство шаблонов
- •ИП. РВ. Устройство шаблонов
- •ИП. РВ. Устройство шаблонов
- •ИП. РВ. Устройство шаблонов
- •ИП. РВ. Устройство шаблонов
- •ИП. РВ. Устройство шаблонов
- •ИП. РВ. Устройство шаблонов
- •ИП. РВ. Устройство шаблонов
- •ИП. РВ. Устройство шаблонов
- •ИП. РВ. Устройство шаблонов. Замены
- •ИП. РВ. Устройство шаблонов. Замены
- •ИП. РВ. Устройство шаблонов. Замены
- •ИП. РВ. Устройство шаблонов. Замены
- •ИП. РВ. Устройство шаблонов. Группы
- •ИП. РВ. Устройство шаблонов. Группы
- •ИП. РВ. Устройство шаблонов. Граничные метасимволы
- •ИП. РВ. Устройство шаблонов. Граничные метасимволы
- •ИП. РВ. Устройство шаблонов. Перечисления
- •ИП. РВ. Устройство шаблонов. Перечисления
- •ИП. РВ. Устройство шаблонов. Утверждения
- •ИП. РВ. Устройство шаблонов. Утверждения
- •ИП. РВ. Устройство шаблонов. Утверждения
- •ИП. РВ. Устройство шаблонов. Условия
- •ИП. Реализация РВ в Java. Возможности класса Pattern
- •ИП. Реализация РВ в Java. Возможности класса Pattern
- •ИП. Реализация РВ в Java. Возможности класса Matcher
- •ИП. Реализация РВ в PHP
- •ИП. Реализация РВ в PHP. Применение callback-функций
- •ИП. Реализация РВ в PHP. Применение callback-функций
- •ИП. Реализация РВ в PHP. Применение callback-функций
- •ИП. Реализация РВ в PHP. Применение callback-функций
- •ИП. Реализация РВ в PHP. Применение callback-функций
- •ИП. Реализация РВ в JavaScript
- •ИП. Реализация РВ в JavaScript. Примеры
Интернет-программирование |
МИЭТ, 2017 |
Лекция 8.
Регулярные выражения (РВ)
ИП. РВ. |
МИЭТ, 201 |
Регулярные выражения – это специальные правила создания шаблонов обработки для строк.
Шаблоны регулярных выражений (regex или regexp) позволяют производить сложный поиск (единичный и групповой) и замену подстрок.
Некоторые этапы развития
1950 – regular sets (Stephen Cole Kleene)
1962 – язык SNOBOL (поиск по шаблону)
1987 – язык Perl
1988 – язык TCL
Тематика регулярных выражений разрабатывались с 1950-х годов. Наиболее изощренными для своего времени регулярные выражения стали в языке Perl, который был изначально предназначен для работы с текстами.
ИП. РВ. Спецификации |
МИЭТ, 2017 |
Раздел «оболочки и утилиты» POSIX (portable operating system interface)
BRE POSIX UNIX (BRE — Basic Regular Expressions)
Определенные метасимволы
.
[ ] [^ ]
^ (действует только в начале выражения) $ (действует только в конце выражения)
*
\{ \} — первоначальный вариант для { } \( \) — первоначальный вариант для ( ) \n, где n — номер от 1 до 9
Раздел «оболочки и утилиты» POSIX (portable operating system interface)
ERE POSIX UNIX (ERE — Extended Regular Expressions)
Метасимволы { } и ( ) не нуждаются в \ \ перед метасимволом отменяет его специальное значение Добавлены метасимволы +, ?, |.
PCRE - (Perl Compatible Regular Expressions) 1997 г.
Регулярные выражения в стиле Perl. Значительно мощнее BRE и BRE+ERE
ИП. РВ. Понятия |
МИЭТ, 2017 |
Основные понятия регулярных выражений
Pattern – объект-шаблон, представляющий регулярное выражение, которое будет сравниваться со строкой
Matcher – объект, интерпретирующий шаблон и выполняющий операции над строками
PatternSyntaxException – не контролируемое исключение, возникающее при ошибке в шаблоне
ИП. РВ. Подключение |
МИЭТ, 2017 |
Java
Для работы c регулярными выражениями используется пакет: java.util.regex import java.util.regex.Matcher; // объект Matcher
import java.util.regex.Pattern; // объект Pattern
PHP
Работа с РВ доступна по умолчанию через функции группы preg_*: preg_match(...), preg_match_all(...), preg_replace(...) и т.д.
JavaScript
Работа с РВ доступна через:
Методы search, match, replace, split – применяемые к строке Методы exec, test. lastIndex объекта RegExp
ИП. РВ. Тестирование |
МИЭТ, 2017 |
Программа для тестирования регулярных выражений на Java
import java.util.regex.Matcher; import java.util.regex.Pattern;
System.out.println("Введите шаблон");
Pattern pattern = Pattern.compile(scan.nextLine());
System.out.println("Введите строку");
Matcher matcher = pattern.matcher(scan.nextLine());
while (matcher.find()) { System.out.println(
"Найден текст " + matcher.group()
+" позиция старта "+matcher.start()
+" позиция окончания "+matcher.end());
}
Пример работы программы:
Введите шаблон [0-9]+ Введите строку we435we
Найден текст 435 позиция старта 2 позиция окончания 5
ИП. РВ. Устройство шаблонов |
МИЭТ, 2017 |
Метасимволы
Метасимволы, это символы, которые обозначают не сами себя, а имеют специальное значение.
Например, метасимвол «точка» - . обозначает любой символ
Другие метасимволы:
([{\^-$|]})?*+.
Существует два способа заставить интерпретатор трактовать метасимволы как обычные символы:
1.Использовать обратную косую черту перед символом. Например \. обозначает точку.
2.Заключить символы между \Q и \E
Пример работы метасимволов
Введите шаблон s\s
Введите строку as ss sd
Найден текст s позиция старта 1 позиция окончания 3 Найден текст s позиция старта 4 позиция окончания 6

ИП. РВ. Устройство шаблонов |
МИЭТ, 2017 |
Классы символов
Класс символов – набор символов в [ ], определяющий сопоставление одного символа в интерпретируемой строке.
[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] |
ИП. РВ. Устройство шаблонов |
МИЭТ, 2017 |
Примеры демонстрирующие работу классов символов
Введите шаблон 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

ИП. РВ. Устройство шаблонов |
МИЭТ, 2017 |
Предопределенные классы
Предопределенные классы короткая запись часто употребляемых классов символов
. |
Любой символ |
\d |
Цифра, [0-9] |
\D |
Не цифра, [^0-9] |
\s |
Пробельный символ, [ \t\n\x0B\f\r] |
\S |
Не пробельный символ, [^\s] |
\w |
Символ слова [a-zA-Z_0-9] |
\W |
Не символ слова [^\w] |