Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
195
Добавлен:
17.04.2018
Размер:
344.58 Кб
Скачать

Интернет-программирование

МИЭТ, 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]

Соседние файлы в папке Интернет технологии