Различия между версиями 1 и 2
Версия 1 от 2020-03-22 14:01:31
Размер: 4589
Редактор: Lecture_Uploads
Комментарий:
Версия 2 от 2020-06-08 23:48:45
Размер: 4597
Редактор: Lecture_Uploads
Комментарий:
Удаления помечены так. Добавления помечены так.
Строка 1: Строка 1:
== 15_Regexp == = 15.0 (Russian conspect) =
Строка 58: Строка 58:

15.0 (Russian conspect)

Поговорим про регулярные выражения – они облегчают командный интерфейс – ситуацию, когда вам полуавтоматическим путем нужно обрабатывать текст.

Шаблон — это такой простой язык описания строки, в котором некоторые символы заменены на спец символы или управляющие.

Как работают шаблоны? У нас “нечто” определяется как строка.

Мы берем шаблон и пытаемся распознать какой части шаблона какая часть строки соответствует. Фактически мы разделяем наш шаблон на атомарные подшаблоны.

А почему мы не можем попросить найти файлы название которых состоит только из цифр?

Потому что только из цифр и любого количества как бы объедены в “один флакон” то есть либо мы говорим любое кол-во любого, либо мы говорим диапазон, и оно одно.

Чем отличаются шаблоны от регулярных выражений? Тем что повторение символа или задавание диапазона размещены.

Главной и часто используемой утилитой командной строки является grep.

Есть повторители – они бывают двух видов: это любое кол-во символов от нуля.

Символ * заменяется на произвольное кол-во любых букв. Вопросительный знак ? меняется на ровно 1 букву и диапазон записанный в [] это ровно одна буква из диапазона.

Есть также позиционирование: есть ^ что обозначает начало строки.

Также существует принцип однозначности – каждый раз мы сопоставляем атомарные регулярны выражения со строкой то мы пытается “съесть” как можно больше – так называемы жадные повторения.

Самый левый – самый длинный: по сути, мы находим match и идем к следующему пока не настанет успех, если успех не настаёт, то мы уменьшаем длину предыдущей строки до тех пор, пока у нас не произойдёт match или урезать уже ничего нельзя.

Другая утилита — это редактор vim – в нем вы можете указать команду search.

Также есть команда sed который является потоковым редактором. Практически vim воспроизводит работу sed.

Помним, что символ * он хитрый так как под него подходит и пустая строка.

Иногда регулярные выражения легче писать чем читать – попробуйте прочитать такое:

sed ‘s/1\([0-9]\)/I\1/g’ < filename

Диапазон может быть не диапазон а просто перечислением: “[1-3]” тоже самое что “123”

Также существует “не входить в диапазон” – пример “[^QET]”

Если использовать sed -E то мы получаем расширенные регулярные выражения в которых можно задать сколько символ может повторятся.

Хорошим тоном считается использовать ‘[:digit:]’ вместо ‘[0-9]’. Это является примеров классом эквивалентности.

Есть следующие классы эквивалентности:

alnum, digit, punct, alpha, graph, space, blank, lower, upper, cntrl, print, xdigit.

HSE/ProgrammingOS/15_Regexp/Conspect (последним исправлял пользователь Lecture_Uploads 2020-06-08 23:48:45)