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

ИП. РВ. Устройство шаблонов. Замены

МИЭТ, 2017

Замена c использованием предыдущего совпадения на JavaScript

<script>

str = "The Miet\n\ris best vuz in Moscow"; alert(str.replace(/(M[^\s]+)/gim, "$1"+" (Zelenograd)")); /*

The Miet (Zelenograd)

is best vuz in Moscow (Zelenograd) */

</script>

ИП. РВ. Устройство шаблонов. Группы

МИЭТ, 2017

Группы

Группы (capturing groups) позволяют трактовать последовательность символов как единое целое.

Все совпадения групп сохраняются в специальном массиве $ и нумеруются так: $0 — содержит все совпадение целиком

$1 — первое совпадение, $2 — второе и т. д.

Пример нумерования групп

Пусть найдено совпадение с шаблоном ((A)(B(C))), тогда массив $ содержит:

$0 - ((A)(B(C))) $1 - (A)

$2 - (B(C)) $3 - (C)

Исключение группы из массива результатов - (?:шаблон)

Запрет возврата назад по строке, если часть шаблона уже найдена - (?>шаблон)

ИП. РВ. Устройство шаблонов. Группы

МИЭТ, 2017

Примеры замен с помощью групп

Введите шаблон

([1-3]+)0([4-6]+) Введите строку

0001230456000

Найден текст 1230456 позиция старта 3 позиция окончания 10

Введите строку или шаблон замены $20$1 Результат

0004560123000

Введите шаблон ([1-3]+)0([4-6]+) Введите строку

0001230456000

Найден текст 1230456 позиция старта 3 позиция окончания 10 Введите строку или шаблон замены $0

Результат

0001230456000

ИП. РВ. Устройство шаблонов. Граничные метасимволы

МИЭТ, 2017

Граничные метасимволы

^

Начало строки

$

Конец строки

\b

Граница слова

\B

Не граница слова

\G

Предыдущий успешный поиск

ИП. РВ. Устройство шаблонов. Граничные метасимволы

МИЭТ, 2017

Использование метасимвола $

 

Введите шаблон abc$

 

Введите строку abc abc abc

 

Найден текст abc позиция старта 8 позиция окончания 11

 

Использование метасимвола ^

 

Введите шаблон ^abc

 

Введите строку abc abc abc

 

Найден текст abc позиция старта 0 позиция окончания 3

 

Использование метасимвола \b

 

Введите шаблон abc\b

 

Введите строку abc abcd abcd abc abc

 

Найден текст abc позиция старта 0 позиция окончания 3

 

Найден текст abc позиция старта 14 позиция окончания 17

 

Найден текст abc позиция старта 18 позиция окончания 21

 

Введите шаблон a[^\b]+\b

Exception in thread "main" java.util.regex.PatternSyntaxException: Illegal/unsupported escape sequence near index 4

a[^\b]+\b

Использование метасимвола \s

Введите шаблон a[^\s]+\s Введите строку abc abc abc

Найден текст abc позиция старта 0 позиция окончания 4 Найден текст abc позиция старта 4 позиция окончания 8

ИП. РВ. Устройство шаблонов. Перечисления

МИЭТ, 2017

Для определения перечислений используется вертикальная черта |. Для включения перечисления в выражение используются группы. По действию перечисления подобны условию «или»

Введите шаблон start|finish Введите строку

MIET start and no finish

Найден текст start позиция старта 5 позиция окончания 10 Найден текст finish позиция старта 18 позиция окончания 24

Пример использования перечисления в группе

Введите шаблон

\d+ (бухгалте|директо)р? Введите строку

84991001010 бухгалтер, 84992002020 менеджер, 84993003030 директор

Найден текст 84991001010 бухгалтер позиция старта 0 позиция

окончания 21 Найден текст 84993003030 директор позиция старта 45 позиция окончания 65

ИП. РВ. Устройство шаблонов. Перечисления

МИЭТ, 2017

Более сложные примеры использования перечислений:

Введите шаблон студенты получат отличный|хороший зачет|экзамен Введите строку студенты получат отличный экзамен Найден текст студенты получат отличный позиция старта 0 позиция окончания 25

Найден текст экзамен позиция старта 26 позиция окончания 33

Введите шаблон студенты получат (отличный|хороший) (зачет|экзамен) Введите строку студенты получат отличный экзамен Найден текст студенты получат отличный экзамен позиция старта 0 позиция окончания 33

Введите шаблон студенты получат (отличный|хороший зачет|экзамен)

Введите строку студенты получат отличный экзамен Найден текст студенты получат отличный позиция старта 0 позиция

окончания 25

Исключение подвыражения из результатов с помощью ?:

Введите шаблон студенты получат ?:отличный|хороший зачет|экзамен

Введите строку студенты получат отличный экзамен Найден текст экзамен позиция старта 26 позиция окончания 33

ИП. РВ. Устройство шаблонов. Утверждения

МИЭТ, 2017

Утверждения проверяют символы находящиеся до или после текущего символа.

Утверждения делятся на позитивные и негативные.

Позитивные принимают true при совпадении, а негативные при НЕ совпадении

Смотрящие вперед (вправо) утверждения задаются так: (?= или (?! Смотрящие назад (влево) утверждения задаются так: (?<= или (?<!

(?=шаблон)

Позитивный просмотр вперед

(?<=шаблон)

Позитивный просмотр назад

(?!шаблон)

Негативный просмотр вперёд

(?<!шаблон)

Негативный просмотр назад

ИП. РВ. Устройство шаблонов. Утверждения МИЭТ, 2017

Примеры использования утверждений: Java. Поиск совпадений

Введите шаблон

\w+(?=;) Введите строку abcd abcd; abcd

Найден текст abcd позиция старта 5 позиция окончания 9

Введите шаблон test(?!success) Введите строку

test test succeess testsuccess test

Найден текст test позиция старта 0 позиция окончания 4 Найден текст test позиция старта 5 позиция окончания 9 Найден текст test позиция старта 31 позиция окончания 35

PHP. Замена с проверкой

<?

$str="The Miet is best vuz in Zelenograd. Address: Moscow Zelenograd"; $result=preg_replace("/(?<!Moscow\s)Zelenograd/", "Moscow", $str); echo $result;

// The Miet is best vuz in Moscow. Address: Moscow Zelenograd /?>

ИП. РВ. Устройство шаблонов. Утверждения

МИЭТ, 2017

Более сложные примеры использования утверждений:

Введите шаблон \w{2}(?=et|em)

Введите строку miet privet vsem nasovsem

Найден текст mi позиция старта 0 позиция окончания 2 Найден текст iv позиция старта 7 позиция окончания 9 Найден текст vs позиция старта 12 позиция окончания 14

Найден текст vs позиция старта 21 позиция окончания 23

Введите шаблон \w{2}(?=et\s|em\s) Введите строку miet privet vsem nasovsem

Найден текст mi позиция старта 0 позиция окончания 2

Найден текст iv позиция старта 7 позиция окончания 9

Найден текст vs позиция старта 12 позиция окончания 14

Введите шаблон (?<=^|\s)\w{2}(?=et\s|em\s) Введите строку miet privet vsem nasovsem

Найден текст mi позиция старта 0 позиция окончания 2 Найден текст vs позиция старта 12 позиция окончания 14

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