Задания взяты сресурса https://regexone.com. Уроки переведены и адаптированы под выполнение в vim.
Уроки https://regexone.com переведены и адаптированы под выполнение в vim.
## Урок 0: Введение и азбука
## Урок 0: Введение и азбука
Регулярные выражения чрезвычайно полезны при извлечении информации из текста,
Регулярные выражения чрезвычайно полезны при извлечении информации из текста, такого как код, файлы журналов, электронные таблицы или даже документы. И хотя за формальными языками стоит много теории, в следующих уроках и примерах будут рассмотрены более практические способы использования регулярных выражений, чтобы вы могли использовать их на практике как можно быстрее.
такого как код, файлы журналов, электронные таблицы или даже документы. И хотя
за формальными языками стоит много теории, в следующих уроках и примерах будут
рассмотрены более практические способы использования регулярных выражений, чтобы
вы могли использовать их на практике как можно быстрее.
Первое, что нужно понять при использовании регулярных выражений, это то, что все
Первое, что нужно понять при использовании регулярных выражений, это то, что все по сути является символом, и мы пишем шаблоны для соответствия определенной последовательности символов (также известной как строка). В большинстве шаблонов используется обычный ASCII, который включает в себя буквы, цифры, знаки препинания и другие символы на клавиатуре, такие как `%#$@!`, но символы Unicode также могут использоваться для соответствия любому типу международного текста.
по сути является символом, и мы пишем шаблоны для соответствия определенной
последовательности символов (также известной как строка). В большинстве шаблонов
используется обычный ASCII, который включает в себя буквы, цифры, знаки
препинания и другие символы на клавиатуре, такие как %#$@!, но символы Unicode
также могут использоваться для соответствия любому типу международного текста.
Включите инкрементальный поиск и подсветку найденных строк.
Включите инкрементальный поиск и подсветку найденных строк.
```
```
: set hls is
: set hls is
```
```
Перейдите в режим поиск из нормального режима vim нажав /. Попробуйте найти
Перейдите в режим поиск из нормального режима vim нажав `/`. Попробуйте найти слово "`abc`". Обратите внимание, как текст подсвечивается, чтобы выделить совпадающие символы в каждой строке. Каждый урок будет расширять ваши знания синтаксиса регулярных выражений. Вашей задачей будет написать шаблон, который соответствует всем строкам урока, которые помечены словом "`найдите`". Строки отмеченные словом "`пропустите`" не должны находится. В заданиях на замену результатом должна быть новая строка.
слово "abc". Обратите внимание, как текст подсвечивается, чтобы выделить
совпадающие символы в каждой строке. Каждый урок будет расширять ваши знания
синтаксиса регулярных выражений. Вашей задачей будет написать шаблон, который
соответствует всем строкам урока, которые помечены слово "найдите". Строки
отмеченные словом "пропустите" не должны находится. В заданиях на замены
результатом должны быть новая строка.
Попробуйте написать шаблон, который соответствует всем трём строкам, это может
Попробуйте написать шаблон, который соответствует всем трём строкам, это может быть так же просто, как общие буквы в каждой строке.
быть так же просто, как общие буквы в каждой строке.
Упражнение 1. Сопоставление символов
Упражнение 1. Сопоставление символов
@ -40,24 +24,13 @@
```
```
## Урок 1½: 123-е
## Урок 1½: 123-е
Символы включают в себя обычные буквы, но также и цифры. На самом деле числа 0-9
Символы включают в себя обычные буквы, но также и цифры. На самом деле числа `0-9` тоже просто символы, и если вы посмотрите на таблицу ASCII, то увидите, что они перечислены последовательно.
тоже просто символы, и если вы посмотрите на таблицу ASCII, то увидите, что они
перечислены последовательно.
На различных уроках вы познакомитесь с рядом специальных метасимволов,
На различных уроках вы познакомитесь с рядом специальных метасимволов, используемых в регулярных выражениях, которые можно использовать для сопоставления определенного типа символов. В этом случае символ `\d` можно использовать вместо любой цифры от 0 до 9. Предыдущий слеш отличает его от простого символа `d` и указывает, что это метасимвол.
используемых в регулярных выражениях, которые можно использовать для
сопоставления определенного типа символов. В этом случае символ \d можно
использовать вместо любой цифры от 0 до 9. Предыдущий слеш отличает его от
простого символа d и указывает, что это метасимвол.
Ниже приведены еще несколько строк текста, содержащих цифры. Попробуйте написать
Ниже приведены еще несколько строк текста, содержащих цифры. Попробуйте написать шаблон, который соответствует всем цифрам в приведенных ниже строках, и обратите внимание, как ваш шаблон совпадает в любом месте строки, а не только начиная с первого символа. Мы узнаем, как ограничивать поиск началом или концом строки в одном из следующих уроках.
шаблон, который соответствует всем цифрам в приведенных ниже строках, и обратите
внимание, как ваш шаблон совпадает в любом месте строки, а не только начиная с
первого символа. Мы узнаем, как ограничивать поиск началом или концом строки
в одном из следующих уроках.
Упражнение 1½: Сопоставление цифр
Упражнение 1½: Сопоставление цифр
```
```
@ -69,21 +42,11 @@
## Урок 2: Точка
## Урок 2: Точка
В некоторых карточных играх Джокер является специальной картой, которая может
В некоторых карточных играх Джокер является специальной картой, которая может выполнять роль любой другой карты в колоде. С помощью регулярных выражений вы часто сопоставляете фрагменты текста, точное содержание которых неизвестно, за исключением того факта, что они имеют общий шаблон или структуру (например, номера телефонов или почтовые индексы).
выполнять роль любой другой карты в колоде. С помощью регулярных выражений вы
часто сопоставляете фрагменты текста, точное содержание которых неизвестно, за
исключением того факта, что они имеют общий шаблон или структуру (например,
номера телефонов или почтовые индексы).
Точно так же существует понятие подстановочного знака, которое представлено
Точно так же существует понятие подстановочного знака, которое представлено расширением `.` (точка) метасимвол и может соответствовать любому одиночному символу (букве, цифре, пробелу и т. д.). Вы можете заметить, что это фактически отменяет шаблон самого символа точки, поэтому для точного соответствия точке вам нужно использовать экранирующий символ `-` обратный слеш.
расширением . (точка) метасимвол и может соответствовать любому одиночному
символу (букве, цифре, пробелу и т. д.). Вы можете заметить, что это фактически
отменяет шаблон самого символа точки, поэтому для точного соответствия точке вам
нужно использовать экранирующий символ - обратный слеш.
Ниже приведена пара строк с разными символами, но одинаковой длины. Попробуйте
Ниже приведена пара строк с разными символами, но одинаковой длины. Попробуйте написать один шаблон, который может соответствовать первым трём строкам, но не последней.
написать один шаблон, который может соответствовать первым трём строкам, но не
последней.
Упражнение 2. Сопоставление с подстановочными знаками
Упражнение 2. Сопоставление с подстановочными знаками
```
```
@ -96,18 +59,11 @@
## Урок 3. Соответствие определенным символам
## Урок 3. Соответствие определенным символам
Метасимвол точки из прошлого урока довольно мощный, но иногда слишком мощный.
Метасимвол точки из прошлого урока довольно мощный, но иногда слишком мощный. Например, если мы сопоставляем номера телефонов, мы не хотим проверять буквы `(abc) def-ghij` как действительные числа!
Например, если мы сопоставляем номера телефонов, мы не хотим проверять буквы
«(abc) def-ghij» как действительные числа!
Существует метод сопоставления определенных символов с использованием регулярных
Существует метод сопоставления определенных символов с использованием регулярных выражений путем перечисления их в квадратных скобках. Например, шаблон `[abc]` будет соответствовать одной из букв `a`, `b` или `c` и ничему другому.
выражений путем перечисления их в квадратных скобках. Например, шаблон [abc]
будет соответствовать одной из букв a, b или c и ничему другому.
Ниже приведена пара строк, где мы хотим сопоставить только первые три строки.
Ниже приведена пара строк, где мы хотим сопоставить только первые три строки. Обратите внимание, что мы не можем избежать сопоставления последних трех строк, если используем точку. Мы должны конкретно определить, какие буквы соответствуют шаблону, используя приведенную выше нотацию.
Обратите внимание, что мы не можем избежать сопоставления последних трех строк,
если используем точку. Мы должны конкретно определить, какие буквы
соответствуют шаблону, используя приведенную выше нотацию.
Упражнение 3. Сопоставление символов
Упражнение 3. Сопоставление символов
```
```
@ -122,21 +78,11 @@
## Урок 4. Исключение определенных символов
## Урок 4. Исключение определенных символов
В некоторых случаях мы можем знать, что есть определенные символы, которые мы не
В некоторых случаях мы можем знать, что есть определенные символы, которые мы не хотим находить. Например, мы можем захотеть сопоставлять только телефонные номера, которые не относятся к коду города 650.
хотим находить. Например, мы можем захотеть сопоставлять только телефонные
номера, которые не относятся к коду города 650.
Чтобы выразить это, мы используем аналогичное выражение, которое исключает
Чтобы выразить это, мы используем аналогичное выражение, которое исключает определенные символы, используя квадратные скобки и символ карет `^`. Например, шаблон `[^abc]` будет соответствовать любому отдельному символу, кроме букв `a`, `b` или `c`.
определенные символы, используя квадратные скобки и символ карет ^. Например,
шаблон [^abc] будет соответствовать любому отдельному символу, кроме букв a, b
или c.
С приведенными ниже строками попробуйте написать шаблон, который соответствует
С приведенными ниже строками попробуйте написать шаблон, который соответствует только животным (свинья, собака), но не болоту. Обратите внимание, что большинство шаблонов этого типа также можно написать, используя технику из прошлого урока, поскольку они на самом деле являются двумя сторонами одной медали. Имея оба варианта, вы можете решить, какой из них легче написать и понять при составлении собственных шаблонов.
только животным (свинья, собака), но не болоту. Обратите внимание, что
большинство шаблонов этого типа также можно написать, используя технику из
прошлого урока, поскольку они на самом деле являются двумя сторонами одной
медали. Имея оба варианта, вы можете решить, какой из них легче написать и
понять при составлении собственных шаблонов.
Упражнение 4. Исключение символов
Упражнение 4. Исключение символов
```
```
@ -148,29 +94,13 @@
## Урок 5: Диапазоны символов
## Урок 5: Диапазоны символов
Мы только что узнали, как создать шаблон, который соответствует или исключает
Мы только что узнали, как создать шаблон, который соответствует или исключает определенные символы, но что, если мы хотим сопоставить символ, который может находиться в последовательном диапазоне символов? У нас нет другого выбора, кроме как перечислить их все?
определенные символы, но что, если мы хотим сопоставить символ, который может
находиться в последовательном диапазоне символов? У нас нет другого выбора,
К счастью, при использовании нотации с квадратными скобками есть сокращение для сопоставления символа в списке последовательных символов с использованием тире для обозначения диапазона символов. Например, шаблон `[0-6]` будет соответствовать только любому однозначному символу от нуля до шести, и никакому другому. Аналогично, `[^n-p]` будет соответствовать только одному символу, кроме букв от `n` до `p`.
кроме как перечислить их все?
В одном и том же наборе квадратных скобок можно использовать несколько диапазонов символов вместе с отдельными символами. Примером этого является буквенно-цифровой метасимвол `\\w`, который эквивалентен диапазону символов `[A-Za-z0-9\_]` и часто используется для сопоставления символов в английском тексте.
К счастью, при использовании нотации с квадратными скобками есть сокращение для
сопоставления символа в списке последовательных символов с использованием тире
В приведенном ниже упражнении обратите внимание на то, что все совпадающие и пропускаемые строки имеют шаблон, и используйте обозначение в квадратных скобках, чтобы сопоставить или пропустить каждый символ в каждой строке. Имейте в виду, что шаблоны чувствительны к регистру, а`az` отличается от `AZ`с точки зрения символов, которым он соответствует (нижний или верхний регистр).
для обозначения диапазона символов. Например, шаблон [0-6] будет соответствовать
только любому однозначному символу от нуля до шести, и никакому другому.
Аналогично, [^n-p] будет соответствовать только одному символу, кроме букв от n
до p.
В одном и том же наборе квадратных скобок можно использовать несколько
диапазонов символов вместе с отдельными символами. Примером этого является
буквенно-цифровой метасимвол \\w, который эквивалентен диапазону символов
[A-Za-z0-9\_] и часто используется для сопоставления символов в английском
тексте.
В приведенном ниже упражнении обратите внимание на то, что все совпадающие и
пропускаемые строки имеют шаблон, и используйте обозначение в квадратных
скобках, чтобы сопоставить или пропустить каждый символ в каждой строке. Имейте
в виду, что шаблоны чувствительны к регистру, а az отличается от AZ с точки
зрения символов, которым он соответствует (нижний или верхний регистр).
Упражнение 5. Сопоставление диапазонов символов
Упражнение 5. Сопоставление диапазонов символов
```
```
@ -181,33 +111,19 @@
пропуститe bby
пропуститe bby
пропуститe ccz
пропуститe ccz
```
```
---
## Урок 6: Ловля zzz
## Урок 6: Ловля zzz
Примечание. Некоторые части приведенного ниже синтаксиса повторения
Примечание. Некоторые части приведенного ниже синтаксиса повторения поддерживаются не во всех реализациях регулярных выражений.
поддерживаются не во всех реализациях регулярных выражений.
До сих пор мы узнали, как указать диапазон символов, которые мы хотим
До сих пор мы узнали, как указать диапазон символов, которые мы хотим сопоставить, но как насчет количества повторений символов, которые мы хотим сопоставить? Один из способов сделать это — явно указать, сколько именно символов мы хотим, например. `\\d\\d\\d`, который будет соответствовать ровно трём цифрам.
сопоставить, но как насчет количества повторений символов, которые мы хотим
сопоставить? Один из способов сделать это — явно указать, сколько именно
символов мы хотим, например. \\d\\d\\d, который будет соответствовать ровно трём
цифрам.
Более удобный способ — указать, сколько повторений каждого символа мы хотим,
Более удобный способ — указать, сколько повторений каждого символа мы хотим, используя нотацию фигурных скобок. Например, `a{3}` будет соответствовать символу a ровно три раза. Некоторые механизмы регулярных выражений даже позволяют вам указать диапазон для этого повторения, так что `{1,3}` будет соответствовать символу a не более 3 раз, но, например, не менее одного раза.
используя нотацию фигурных скобок. Например, a{3} будет соответствовать символу
a ровно три раза. Некоторые механизмы регулярных выражений даже позволяют вам
указать диапазон для этого повторения, так что {1,3} будет соответствовать
символу a не более 3 раз, но, например, не менее одного раза.
Этот квантификатор можно использовать с любым символом или специальными
Этот квантификатор можно использовать с любым символом или специальными метасимволами, например `w{3}` (три w), `[wxy]{5}` (пять символов, каждый из которых может быть `w`, `x` или `y`) и `.{2. ,6}` (от двух до шести любых символов).
метасимволами, например w{3} (три w), [wxy]{5} (пять символов, каждый из которых
может быть w, x или y) и .{2. ,6} (от двух до шести любых символов).
В приведенных ниже строках последняя строка, содержащая только одну букву z, не
В приведенных ниже строках последняя строка, содержащая только одну букву `z`, не соответствует правильному написанию сленгового выражения «`wazzup?`». Попробуйте написать шаблон, который соответствует только первым двум вариантам написания, используя фигурные скобки выше.
соответствует правильному написанию сленгового выражения «wazzup?». Попробуйте
написать шаблон, который соответствует только первым двум вариантам написания,
используя фигурные скобки выше.
Упражнение 6. Сопоставление повторяющихся символов
Упражнение 6. Сопоставление повторяющихся символов
```
```
@ -215,30 +131,17 @@ a ровно три раза. Некоторые механизмы регуля
найдите wazzzup
найдите wazzzup
пропустите wazup
пропустите wazup
```
```
---
## Урок 7: Мистер Клини, мистер Клини
## Урок 7: Мистер Клини, мистер Клини
Мощной концепцией регулярных выражений является возможность сопоставлять
Мощной концепцией регулярных выражений является возможность сопоставлять произвольное количество символов. Например, представьте, что вы написали форму с полем для пожертвований, которое принимает числовое значение в долларах. Состоятельный пользователь может зайти и захотеть пожертвовать 25 000 долларов, в то время как обычный пользователь может захотеть пожертвовать 25 долларов.
произвольное количество символов. Например, представьте, что вы написали форму с
полем для пожертвований, которое принимает числовое значение в долларах.
Состоятельный пользователь может зайти и захотеть пожертвовать 25 000 долларов,
в то время как обычный пользователь может захотеть пожертвовать 25 долларов.
Одним из способов выражения такого шаблона было бы использование того, что
Одним из способов выражения такого шаблона было бы использование, звезды Клини и плюса Клини, которые по существу представляют либо 0 или более, либо 1 или более символов, за которыми он следует (он всегда следует за символом или группой). Например, чтобы сопоставить перечисленные выше пожертвования, мы можем использовать шаблон `\d*` для сопоставления любого количества цифр, но более строгим регулярным выражением будет `\d+`, которое гарантирует, что входная строка содержит хотя бы одну цифру.
известно как звезда Клини и плюс Клини, которые по существу представляют либо 0
или более, либо 1 или более символов, за которыми он следует (он всегда следует
за символом или группой). Например, чтобы сопоставить перечисленные выше
пожертвования, мы можем использовать шаблон \d* для сопоставления любого
количества цифр, но более строгим регулярным выражением будет \d+, которое
гарантирует, что входная строка содержит хотя бы одну цифру.
Эти квантификаторы можно использовать с любым символом или специальными
Эти квантификаторы можно использовать с любым символом или специальными метасимволами, например, `a+` (один или несколько символов a), `[abc]+` (один или несколько любых символов `a`, `b` или `c`) и `.*` (ноль или более любых символов).
метасимволами, например, a+ (один или несколько символов a), [abc]+ (один или
несколько любых символов a, b или c) и .* (ноль или более любых символов). ).
Ниже приведены несколько простых строк, которые можно сопоставить, используя
Ниже приведены несколько простых строк, которые можно сопоставить, используя метасимволы звездочки и плюса.
метасимволы звездочки и плюса.
Упражнение 7. Сопоставление повторяющихся символов
Упражнение 7. Сопоставление повторяющихся символов
```
```
@ -247,28 +150,17 @@ a ровно три раза. Некоторые механизмы регуля
найдите aacc
найдите aacc
пропустите a
пропустите a
```
```
---
## Урок 8: Необязательные символы
## Урок 8: Необязательные символы
Как вы видели, звездочка Клини и плюс позволяют нам сопоставлять повторяющиеся
Как вы видели, звездочка Клини и плюс позволяют нам сопоставлять повторяющиеся символы в строке.
символы в строке.
Другой квантификатор, который действительно часто используется при сопоставлении
Другой квантификатор, который действительно часто используется при сопоставлении и извлечении текста, — это `?` (вопросительный знак) метасимвол, обозначающий опциональность. Этот метасимвол позволяет вам сопоставить либо ноль, либо один из предшествующих символов или групп. Например, шаблон `ab?c` будет соответствовать либо строкам `abc`, либо `ac`, поскольку `b` считается необязательным.
и извлечении текста, — это ? (вопросительный знак) метасимвол, обозначающий
опциональность. Этот метасимвол позволяет вам сопоставить либо ноль, либо один
из предшествующих символов или групп. Например, шаблон ab?c будет
соответствовать либо строкам «abc», либо «ac», поскольку b считается
необязательным.
Подобно метасимволу точки, вопросительный знак является специальным символом, и
Подобно метасимволу точки, вопросительный знак является специальным символом, и вам придется экранировать его, используя косую черту `?` чтобы соответствовать простому символу вопросительного знака в строке.
вам придется экранировать его, используя косую черту ? чтобы соответствовать
простому символу вопросительного знака в строке.
В приведенных ниже строках обратите внимание, как множественность слова «file»
В приведенных ниже строках обратите внимание, как множественность слова `file` зависит от количества найденных файлов. Попробуйте написать шаблон, который использует метасимвол опциональности для соответствия только строкам, в которых был найден один или несколько файлов.
зависит от количества найденных файлов. Попробуйте написать шаблон, который
использует метасимвол опциональности для соответствия только строкам, в которых
был найден один или несколько файлов.
Упражнение 8. Сопоставление необязательных символов
Упражнение 8. Сопоставление необязательных символов
```
```
@ -277,29 +169,15 @@ a ровно три раза. Некоторые механизмы регуля
найдите 24 files found?
найдите 24 files found?
пропустите No files found.
пропустите No files found.
```
```
---
## Урок 9: Все эти пробелы
## Урок 9: Все эти пробелы
При работе с реальным вводом, таким как файлы журналов и даже пользовательский
При работе с реальным вводом, таким как файлы журналов и даже пользовательский ввод, трудно не столкнуться с пробелами. Мы используем их для форматирования фрагментов информации, чтобы ее было легче читать и просматривать визуально, а один пробел может испортить простейшее регулярное выражение.
ввод, трудно не столкнуться с пробелами. Мы используем их для форматирования
фрагментов информации, чтобы ее было легче читать и просматривать визуально, а
Наиболее распространенными формами пробелов, которые вы будете использовать с регулярными выражениями, являются пробел (` `), табуляция (`\t`), новая строка (`\n`) и возврат каретки (`\r`) (полезно в средах Windows). специальные символы соответствуют каждому из соответствующих им пробелов. Кроме того, специальный символ пробела `\s` будет соответствовать любому из указанных выше пробелов и чрезвычайно полезен при работе с необработанным входным текстом (не в Vim, используйте пробел).
один пробел может испортить простейшее регулярное выражение.
В приведенных ниже строках вы обнаружите, что содержимое каждой строки отделено некоторым пробелом от индекса строки (число является частью текста для соответствия). Попробуйте написать шаблон, который может сопоставлять каждую строку, содержащую пробельные символы между числом и содержимым. Обратите внимание, что пробельные символы аналогичны любым другим символам, а также могут использоваться специальные метасимволы, такие как звездочка и плюс.
Наиболее распространенными формами пробелов, которые вы будете использовать с
регулярными выражениями, являются пробел ( ), табуляция (\t), новая строка
(\n) и возврат каретки (\r) (полезно в средах Windows). специальные символы
соответствуют каждому из соответствующих им пробелов. Кроме того, специальный
символ пробела \s будет соответствовать любому из указанных выше пробелов и
чрезвычайно полезен при работе с необработанным входным текстом (не в Vim,
используйте пробел).
В приведенных ниже строках вы обнаружите, что содержимое каждой строки отделено
некоторым пробелом от индекса строки (число является частью текста для
соответствия). Попробуйте написать шаблон, который может сопоставлять каждую
строку, содержащую пробельные символы между числом и содержимым. Обратите
внимание, что пробельные символы аналогичны любым другим символам, а также могут
использоваться специальные метасимволы, такие как звездочка и плюс.
Упражнение 9: сопоставление пробелов
Упражнение 9: сопоставление пробелов
```
```
@ -308,31 +186,18 @@ a ровно три раза. Некоторые механизмы регуля
найдите 3. abc
найдите 3. abc
пропустите 4.abc
пропустите 4.abc
```
```
---
## Урок 10: Начало и конец строки
## Урок 10: Начало и конец строки
До сих пор мы писали регулярные выражения, которые частично соответствуют
До сих пор мы писали регулярные выражения, которые частично соответствуют фрагментам всего текста. Иногда это нежелательно, представьте, например, что мы хотим сопоставить слово «success» в файле журнала. Мы, конечно же, не хотим, чтобы этот шаблон соответствовал строке с надписью «Error: unsuccessful operation»! Вот почему часто рекомендуется писать как можно более конкретные регулярные выражения, чтобы гарантировать, что мы не получим ложных срабатываний при сопоставлении с реальным текстом.
фрагментам всего текста. Иногда это нежелательно, представьте, например, что мы
хотим сопоставить слово «success» в файле журнала. Мы, конечно же, не хотим,
чтобы этот шаблон соответствовал строке с надписью «Error: unsuccessful
operation»! Вот почему часто рекомендуется писать как можно более конкретные
регулярные выражения, чтобы гарантировать, что мы не получим ложных срабатываний
при сопоставлении с реальным текстом.
Один из способов сузить шаблоны — определить шаблон, описывающий начало и конец
Один из способов сузить шаблоны — определить шаблон, описывающий начало и конец строки с помощью специальных метасимволов `^` (карет) и `$` (знак доллара). В приведенном выше примере мы можем использовать шаблон ^success для соответствия
строки с помощью специальных метасимволов ^ (карет) и $ (знак доллара). В
только строке, начинающейся со слова «`success`», но не строке «`Error: unsuccessful operation`». А если вы объедините и карет, и знак доллара, вы создадите шаблон, которому соответствует вся строка от начала и до конца.
приведенном выше примере мы можем использовать шаблон ^success для соответствия
только строке, начинающейся со слова «success», но не строке «Error:
unsuccessful operation». А если вы объедините и карет, и знак доллара, вы
создадите шаблон, которому соответствует вся строка от начала и до конца.
Обратите внимание, что это отличается от карет, используемой внутри набора
Обратите внимание, что это отличается от карет, используемой внутри набора квадратных скобок `[^...]` для исключения символов, что может сбивать с толку при чтении регулярных выражений.
квадратных скобок [^...] для исключения символов, что может сбивать с толку при
чтении регулярных выражений.
Попробуйте сопоставить каждую из приведенных ниже строк, используя новые
Попробуйте сопоставить каждую из приведенных ниже строк, используя новые специальные символы.
специальные символы.
Упражнение 10. Сопоставление линий
Упражнение 10. Сопоставление линий
```
```
@ -343,25 +208,14 @@ Last Mission: unsuccessful
пропустите
пропустите
Next Mission: successful upon capture of target
Next Mission: successful upon capture of target
```
```
---
## Урок 11: Сопоставление групп
## Урок 11: Сопоставление групп
Регулярные выражения позволяют нам не только сопоставлять текст, но и извлекать
Регулярные выражения позволяют нам не только сопоставлять текст, но и извлекать информацию для дальнейшей обработки. Это делается путем определения групп символов и их захвата с помощью специальных скобок `(` и `)` метасимволов. Любой подшаблон внутри пары круглых скобок будет захвачен как группа. На практике это можно использовать для извлечения такой информации, как номера телефонов или электронные письма, из всех видов данных.
информацию для дальнейшей обработки. Это делается путем определения групп
символов и их захвата с помощью специальных скобок ( и ) метасимволов. Любой
подшаблон внутри пары круглых скобок будет захвачен как группа. На практике это
можно использовать для извлечения такой информации, как номера телефонов или
электронные письма, из всех видов данных.
Представьте, например, что у вас есть инструмент командной строки для вывода
Представьте, например, что у вас есть инструмент командной строки для вывода списка всех файлов изображений, которые у вас хранятся в облаке. Затем вы можете использовать шаблон `^(IMG\d+.png)$`, чтобы найти и извлечь полное имя файла, но если вы хотите захватить только имя файла без расширения, вы можете использовать шаблон `^(IMG\d+)` .png$, который захватывает только часть до точки.
списка всех файлов изображений, которые у вас хранятся в облаке. Затем вы можете
использовать шаблон ^(IMG\d+.png)$, чтобы найти и извлечь полное имя файла, но
если вы хотите захватить только имя файла без расширения, вы можете использовать
шаблон ^(IMG\d+) .png$, который захватывает только часть до точки.
Продолжайте и попробуйте использовать группы, для регулярного выражения, которое
Продолжайте и попробуйте использовать группы, для регулярного выражения, которое соответствует только именам файлов pdf (без расширения).
соответствует только именам файлов pdf (без расширения).
В Vim используйте команду ":%s/шаблон/замена/g" для выполнения упражнения.
В Vim используйте команду ":%s/шаблон/замена/g" для выполнения упражнения.
В Vim cкобки групп экранируются \(\).
В Vim cкобки групп экранируются \(\).
@ -376,25 +230,15 @@ Next Mission: successful upon capture of target
## Урок 12: Вложенные группы
## Урок 12: Вложенные группы
Когда вы работаете со сложными данными, вам может легко понадобиться извлекать
Когда вы работаете со сложными данными, вам может легко понадобиться извлекать несколько слоев информации, что может привести к вложенным группам. Как правило, результаты захваченных групп находятся в том порядке, в котором они определены (в порядке открытия скобок).
несколько слоев информации, что может привести к вложенным группам. Как правило,
результаты захваченных групп находятся в том порядке, в котором они определены
(в порядке открытия скобок).
Возьмем пример из предыдущего урока о захвате имен файлов всех
Возьмем пример из предыдущего урока о захвате имен файлов всех изображений.файлы, которые у вас есть в списке. Если бы каждый из этих файлов изображений имел последовательный номер изображения в имени файла, вы могли бы извлечь и имя файла, и номер изображения, используя один и тот же шаблон, написав выражение наподобие `^(IMG(\d+)).png$` (используя вложенный скобки для записи цифр).
изображений.файлы, которые у вас есть в списке. Если бы каждый из этих файлов
изображений имел последовательный номер изображения в имени файла, вы могли бы
извлечь и имя файла, и номер изображения, используя один и тот же шаблон,
написав выражение наподобие ^(IMG(\d+)).png$ (используя вложенный скобки для
записи цифр).
Вложенные группы читаются в шаблоне слева направо, при этом первая группа
Вложенные группы читаются в шаблоне слева направо, при этом первая группа захвата является содержимым первой группы скобок и т. д.
захвата является содержимым первой группы скобок и т. д.
Для следующих строк напишите выражение, которое соответствует и фиксирует как
Для следующих строк напишите выражение, которое соответствует и фиксирует как полную дату, так и год даты.
полную дату, так и год даты.
В Vim используйте команду ":%s/шаблон/замена/g" для выполнения упражнения.
В Vim используйте команду `:%s/шаблон/замена/g` для выполнения упражнения.
Упражнение 12. Сопоставление вложенных групп
Упражнение 12. Сопоставление вложенных групп
```
```
@ -408,23 +252,15 @@ Next Mission: successful upon capture of target
## Урок 13: Ещё больше разных групп
## Урок 13: Ещё больше разных групп
Как вы видели в предыдущих уроках, все квантификаторы, включая звездочку \*,
Как вы видели в предыдущих уроках, все квантификаторы, включая звездочку `\*`, плюс `+`, повторение `{m,n}` и вопросительный знак `?` все они могут использоваться в шаблонах группы захвата. Это единственный способ применить квантификаторы к последовательностям символов, а не к отдельным символам.
плюс +, повторение {m,n} и вопросительный знак ? все они могут использоваться в
шаблонах группы захвата. Это единственный способ применить квантификаторы к
последовательностям символов, а не к отдельным символам.
Например, если бы я знал, что номер телефона может содержать или не содержать
Например, если бы я знал, что номер телефона может содержать или не содержать код города, правильный шаблон будет проверять наличие всей группы цифр `(\d{3})?`а не сами отдельные персонажи (что было бы неправильно).
код города, правильный шаблон будет проверять наличие всей группы цифр (\d{3})?
а не сами отдельные персонажи (что было бы неправильно).
В зависимости от используемого механизма регулярных выражений вы также можете
В зависимости от используемого механизма регулярных выражений вы также можете использовать группы без захвата, которые позволят вам сопоставить группу, но не отображать ее в результатах.
использовать группы без захвата, которые позволят вам сопоставить группу, но не
отображать ее в результатах.
Ниже приведены несколько различных распространенных разрешений дисплея,
Ниже приведены несколько различных распространенных разрешений дисплея, попробуйте зафиксировать ширину и высоту каждого дисплея.
попробуйте зафиксировать ширину и высоту каждого дисплея.
В Vim используйте команду ":%s/шаблон/замена/g" для выполнения упражнения.
В Vim используйте команду `:%s/шаблон/замена/g` для выполнения упражнения.
Упражнение 13. Сопоставление вложенных групп
Упражнение 13. Сопоставление вложенных групп
```
```
@ -436,28 +272,13 @@ Next Mission: successful upon capture of target
## Урок 14: Все условно
## Урок 14: Все условно
Как мы упоминали ранее, всегда хорошо быть точным, и это относится к
Как мы упоминали ранее, всегда хорошо быть точным, и это относится к кодированию, разговорам и даже регулярным выражениям. Например, вы не станете составлять список покупок для кого-то, чтобы купить больше `.*`, потому что вы не представляете, что вы можете получить взамен. Вместо этого вы могли бы написать «`Купи больше молока`» или «`Купи больше хлеба`», и в регулярных выражениях мы можем определить эти условия явно.
кодированию, разговорам и даже регулярным выражениям. Например, вы не станете
составлять список покупок для кого-то, чтобы купить больше .*, потому что вы не
В частности, при использовании групп вы можете использовать `|` (логическое ИЛИ, также известное как вертикальная черта) для обозначения различных возможных наборов символов. В приведенном выше примере я могу написать шаблон «`Купить еще (молока|хлеба|сока)`», чтобы он соответствовал только строкам «`Купить еще молока`», «`Купить еще хлеба`» или «`Купить еще сока`».
представляете, что вы можете получить взамен. Вместо этого вы могли бы написать
«Купи больше молока» или «Купи больше хлеба», и в регулярных выражениях мы можем
Как и в обычных группах, вы можете использовать любую последовательность символов или метасимволов в условии, например, `([cb]ats*|[dh]ogs?)` соответствует либо кошкам, либо летучим мышам, либо собакам, либо свиньям. Написание шаблонов со многими словиями может быть трудным для чтения, поэтому вам следует подумать о том, чтобы сделать их отдельными шаблонами, если они станут слишком сложными.
определить эти условия явно.
Попробуйте написать условный шаблон, который соответствует только линиям с маленькими нечеткими существами ниже.
В частности, при использовании групп вы можете использовать | (логическое ИЛИ,
также известное как вертикальная черта) для обозначения различных возможных
наборов символов. В приведенном выше примере я могу написать шаблон «Купить еще
(молока|хлеба|сока)», чтобы он соответствовал только строкам «Купить еще
молока», «Купить еще хлеба» или «Купить еще сока».
Как и в обычных группах, вы можете использовать любую последовательность
символов или метасимволов в условии, например, ([cb]ats*|[dh]ogs?)
соответствует либо кошкам, либо летучим мышам, либо собакам, либо свиньям.
Написание шаблонов со многими условиями может быть трудным для чтения, поэтому
вам следует подумать о том, чтобы сделать их отдельными шаблонами, если они
станут слишком сложными.
Попробуйте написать условный шаблон, который соответствует только линиям с
маленькими нечеткими существами ниже.
Упражнение 14. Сопоставление условного текста
Упражнение 14. Сопоставление условного текста
```
```
@ -470,34 +291,15 @@ Next Mission: successful upon capture of target
## Урок 15: Другие специальные символы
## Урок 15: Другие специальные символы
В этом уроке будут рассмотрены некоторые дополнительные метасимволы, а также
В этом уроке будут рассмотрены некоторые дополнительные метасимволы, а также результаты захваченных групп.
результаты захваченных групп.
Мы уже изучили наиболее распространенные метасимволы для записи цифр с помощью `\d`, пробелов с помощью `\s` и буквенно-цифровых букв и цифр с помощью `\w`, но регулярные выражения также предоставляют способ указания противоположных наборов каждого из этих метасимволов с помощью их верхних значений. дела буквы. Например, `\D` представляет собой любой нецифровой символ, `\S` — любой непробельный символ, а`\W` — любой небуквенно-цифровой символ (например, знак препинания). В зависимости от того, как вы составляете свое регулярное выражение, может быть проще использовать одно или другое.
Мы уже изучили наиболее распространенные метасимволы для записи цифр с помощью
\d, пробелов с помощью \s и буквенно-цифровых букв и цифр с помощью \w, но
Кроме того, существует специальный метасимвол `\b`, который соответствует границе между словом и символом, не являющимся словом. Это наиболее полезно при захвате целых слов (например, с помощью шаблона `\w+\b`).
регулярные выражения также предоставляют способ указания противоположных наборов
каждого из этих метасимволов с помощью их верхних значений. дела буквы.
Одна концепция, которую мы не будем подробно рассматривать в этих уроках, — это обратные ссылки, главным образом потому, что она зависит от реализации. Однако многие системы позволяют ссылаться на захваченные группы, используя `\0` (обычно полный совпадающий текст), `\1` (группа 1), `\2` (группа 2) и т. д. Это полезно, например, когда вы находитесь в текстовом редакторе и выполняя поиск и замену с помощью регулярных выражений, чтобы поменять местами два числа, вы можете выполнить поиск "`(\d+)-(\d+)`" и заменить его на "`\2-\1`", чтобы поставить второе захваченное число первым, и первый захваченный номер второй например.
Например, \D представляет собой любой нецифровой символ, \S — любой
непробельный символ, а \W — любой небуквенно-цифровой символ (например, знак
Ниже приведены несколько различных строк, попробуйте различные типы метасимволов или что-нибудь, чему мы научились на предыдущих уроках, и продолжайте, когда будете готовы.
препинания). В зависимости от того, как вы составляете свое регулярное
выражение, может быть проще использовать одно или другое.
Кроме того, существует специальный метасимвол \b, который соответствует границе
между словом и символом, не являющимся словом. Это наиболее полезно при захвате
целых слов (например, с помощью шаблона \w+\b).
Одна концепция, которую мы не будем подробно рассматривать в этих уроках, — это
обратные ссылки, главным образом потому, что она зависит от реализации. Однако
многие системы позволяют ссылаться на захваченные группы, используя \0 (обычно
полный совпадающий текст), \1 (группа 1), \2 (группа 2) и т. д. Это полезно,
например, когда вы находитесь в текстовом редакторе и выполняя поиск и замену с
помощью регулярных выражений, чтобы поменять местами два числа, вы можете
выполнить поиск "(\d+)-(\d+)" и заменить его на "\2-\1", чтобы поставить
второе захваченное число первым, и первый захваченный номер второй например.
Ниже приведены несколько различных строк, попробуйте различные типы метасимволов
или что-нибудь, чему мы научились на предыдущих уроках, и продолжайте, когда
будете готовы.
Упражнение 15. Сопоставление других специальных символов
Упражнение 15. Сопоставление других специальных символов