- •Интернет-программирование
- •ИП. РВ. Спецификации
- •ИП. РВ. Понятия
- •ИП. РВ. Подключение
- •ИП. РВ. Тестирование
- •ИП. РВ. Устройство шаблонов
- •ИП. РВ. Устройство шаблонов
- •ИП. РВ. Устройство шаблонов
- •ИП. РВ. Устройство шаблонов
- •ИП. РВ. Устройство шаблонов
- •ИП. РВ. Устройство шаблонов
- •ИП. РВ. Устройство шаблонов
- •ИП. РВ. Устройство шаблонов
- •ИП. РВ. Устройство шаблонов
- •ИП. РВ. Устройство шаблонов
- •ИП. РВ. Устройство шаблонов
- •ИП. РВ. Устройство шаблонов. Замены
- •ИП. РВ. Устройство шаблонов. Замены
- •ИП. РВ. Устройство шаблонов. Замены
- •ИП. РВ. Устройство шаблонов. Замены
- •ИП. РВ. Устройство шаблонов. Группы
- •ИП. РВ. Устройство шаблонов. Группы
- •ИП. РВ. Устройство шаблонов. Граничные метасимволы
- •ИП. РВ. Устройство шаблонов. Граничные метасимволы
- •ИП. РВ. Устройство шаблонов. Перечисления
- •ИП. РВ. Устройство шаблонов. Перечисления
- •ИП. РВ. Устройство шаблонов. Утверждения
- •ИП. РВ. Устройство шаблонов. Утверждения
- •ИП. РВ. Устройство шаблонов. Утверждения
- •ИП. РВ. Устройство шаблонов. Условия
- •ИП. Реализация РВ в Java. Возможности класса Pattern
- •ИП. Реализация РВ в Java. Возможности класса Pattern
- •ИП. Реализация РВ в Java. Возможности класса Matcher
- •ИП. Реализация РВ в PHP
- •ИП. Реализация РВ в PHP. Применение callback-функций
- •ИП. Реализация РВ в PHP. Применение callback-функций
- •ИП. Реализация РВ в PHP. Применение callback-функций
- •ИП. Реализация РВ в PHP. Применение callback-функций
- •ИП. Реализация РВ в PHP. Применение callback-функций
- •ИП. Реализация РВ в JavaScript
- •ИП. Реализация РВ в JavaScript. Примеры
ИП. РВ. Устройство шаблонов |
МИЭТ, 2017 |
Квантификаторы
Квантификаторы определяют количество повторений
Выражение
X?
X*
X+
X{n}
X{n,}
X{n,m}
Квантификатор |
Действие квантификатора |
? |
Один или ни одного |
* |
Ни одного, или неограниченно много |
+ |
Один или много |
{n} |
n повторений |
{n,} |
Как минимум n повторений |
{n,m} |
Как минимум n, но не больше m |
ИП. РВ. Устройство шаблонов |
МИЭТ, 2017 |
? - один или ни одного
Введите шаблон a? Введите строку aa aa
Найден текст a позиция старта 0 позиция окончания 1 Найден текст a позиция старта 1 позиция окончания 2
Найден текст |
позиция старта 2 позиция окончания 2 |
Найден текст a позиция старта 3 позиция окончания 4 |
|
Найден текст a позиция старта 4 позиция окончания 5 |
|
Найден текст |
позиция старта 5 позиция окончания 5 |
+ - один или много |
|
Введите шаблон a+ |
|
Введите строку aa aa |
|
Найден текст aa позиция старта |
0 |
позиция окончания 2 |
|
Найден текст aa позиция старта |
3 |
позиция окончания 5 |
|
* - ноль или много |
|
|
|
Введите шаблон a* |
|
|
|
Введите строку aa aa |
|
|
|
Найден текст aa позиция старта |
0 |
позиция окончания 2 |
|
Найден текст |
позиция старта 2 |
позиция окончания 2 |
|
Найден текст aa позиция старта |
3 |
позиция окончания 5 |
|
Найден текст |
позиция старта 5 |
позиция окончания 5 |
|
ИП. РВ. Устройство шаблонов |
МИЭТ, 2017 |
Введите шаблон |
a?b* |
|
|
|
Введите строку |
aa ab bb ba |
|
|
|
Найден текст a |
позиция старта 0 |
позиция окончания 1 |
|
|
Найден текст a |
позиция старта 1 |
позиция окончания 2 |
|
|
Найден текст |
позиция старта 2 |
позиция окончания 2 |
|
|
Найден текст ab позиция старта |
3 позиция окончания |
5 |
||
Найден текст |
позиция старта 5 |
позиция окончания 5 |
|
|
Найден текст bb позиция старта |
6 позиция окончания |
8 |
||
Найден текст |
позиция старта 8 |
позиция окончания 8 |
|
|
Найден текст b |
позиция старта 9 |
позиция окончания 10 |
||
Найден текст a |
позиция старта 10 позиция окончания |
11 |
||
Найден текст |
позиция старта 11 |
позиция окончания 11 |
||
Введите шаблон a?b+ Введите строку aa ab bb ba
Найден текст ab позиция старта 3 позиция окончания 5 Найден текст bb позиция старта 6 позиция окончания 8
Найден текст b позиция старта 9 позиция окончания 10
Введите шаблон a{2,3}
Введите строку a aa aaa aaaa aaaaa
Найден текст aa позиция старта 2 позиция окончания 4 Найден текст aaa позиция старта 5 позиция окончания 8 Найден текст aaa позиция старта 9 позиция окончания 12
Найден текст aaa позиция старта 14 позиция окончания 17
Найден текст aa позиция старта 17 позиция окончания 19
ИП. РВ. Устройство шаблонов |
МИЭТ, 2017 |
||
Выра |
Кванти |
Действие квантификатора |
|
жение |
фикатор |
|
|
|
|
||
|
+ |
Жадный (greedy) – находит соответствие шаблону наиболее |
|
|
? |
||
X+ |
* |
длинной части строки. |
|
{n} |
Подстановка квантификатора выполняется максимальное число |
||
|
{n,} |
раз до достижения соответствия шаблону. |
|
|
{n,m} |
|
|
|
|
Ленивый (reluctant) – находит соответствие шаблону наиболее |
|
X+? |
? |
короткую часть строки. |
|
Подстановка квантификатора выполняется минимальное число |
|||
|
|
раз до достижения соответствия шаблону. |
|
X++ |
+ |
Захватывающий (possessive) – находит единственное |
|
соответствие шаблону без откатывания назад |
|
||
|
|
|
|
ИП. РВ. Устройство шаблонов |
МИЭТ, 2017 |
?? - самые короткие совпадения для один или ни одного
Введите шаблон a??
Введите строку aa aa
Найден текст позиция старта 0 позиция окончания 0 Найден текст позиция старта 1 позиция окончания 1 Найден текст позиция старта 2 позиция окончания 2 Найден текст позиция старта 3 позиция окончания 3
Найден текст позиция старта 4 позиция окончания 4 Найден текст позиция старта 5 позиция окончания 5
+? - самые короткие совпадения для один или много
Введите шаблон a+? Введите строку aa aa
Найден текст a позиция старта 0 позиция окончания 1
Найден текст a позиция старта 1 позиция окончания 2
Найден текст a позиция старта 3 позиция окончания 4
Найден текст a позиция старта 4 позиция окончания 5
*? - самые короткие совпадения для ноль или много
Введите шаблон a*?
Введите строку aa aa
Найден текст позиция старта 0 позиция окончания 0
Найден текст позиция старта 1 позиция окончания 1 Найден текст позиция старта 2 позиция окончания 2 Найден текст позиция старта 3 позиция окончания 3 Найден текст позиция старта 4 позиция окончания 4
Найден текст позиция старта 5 позиция окончания 5
ИП. РВ. Устройство шаблонов |
МИЭТ, 2017 |
?+ - все возможные совпадения для один или ни одного
Введите шаблон a?+ Введите строку aa aa
Найден текст a позиция старта 0 позиция окончания 1 Найден текст a позиция старта 1 позиция окончания 2 Найден текст позиция старта 2 позиция окончания 2 Найден текст a позиция старта 3 позиция окончания 4
Найден текст a позиция старта 4 позиция окончания 5
Найден текст позиция старта 5 позиция окончания 5
++ - все возможные совпадения для один или много
Введите шаблон a++ Введите строку aa aa
Найден текст aa позиция старта 0 позиция окончания 2 Найден текст aa позиция старта 3 позиция окончания 5
*+ - все возможные совпадения для ноль или много
Введите шаблон a*+ Введите строку aa aa
Найден текст aa позиция старта 0 позиция окончания 2
Найден текст позиция старта 2 позиция окончания 2
Найден текст aa позиция старта 3 позиция окончания 5 Найден текст позиция старта 5 позиция окончания 5
ИП. РВ. Устройство шаблонов |
МИЭТ, 2017 |
Более сложные примеры демонстрирующие жадность квантификаторов
Введите шаблон ".+"
Введите строку Студенты "спят" на лекции из-за "душного" лектора Найден текст "спят" на лекции из-за "душного" позиция старта 9 позиция окончания 41
Введите шаблон ".+?"
Введите строку Студенты "спят" на лекции из-за "душного" лектора
Найден текст "спят" позиция старта 9 позиция окончания 15 Найден текст "душного" позиция старта 32 позиция окончания 41 позиция окончания 41
ИП. РВ. Устройство шаблонов. Замены |
МИЭТ, 2017 |
Java
Замены выполняются с помощью следующих методов класса Matcher replaceFirst() - замена первого совпадения и
replaceAll() - замена всех совпадений
PHP
Замены выполняется функцией preg_replace($pattern, $str_replace, $str);
JavaScript
Замены выполняется методом replace строки: str.replace(pattern, str_rellace);
ИП. РВ. Устройство шаблонов. Замены |
МИЭТ, 2017 |
Измененная программа демонстрации работы РВ для замены в строках
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());
}
System.out.println("Введите строку или шаблон замены"); String strReplace = scan.nextLine();
if( !strReplace.isEmpty() ) { System.out.println("Результат");
System.out.println(matcher.replaceFirst(strReplace));
}
ИП. РВ. Устройство шаблонов. Замены |
МИЭТ, 2017 |
Единичная замена (replaceFirst())
Введите шаблон 2[^1-3]+ Введите строку 1124312215
Найден текст 24 позиция старта 2 позиция окончания 4
Введите строку или шаблон замены aa
Результат
11aa312215
Множественная замена (replaceAll())
Введите шаблон
2[^1-3]+
Введите строку 1124312215_1124312215
Найден текст 24 позиция старта 2 позиция окончания 4
Найден текст 24 позиция старта 13 позиция окончания 15 Введите строку или шаблон замены
Aa Результат
11aa312215_11aa312215
