diff --git a/translations/README-ru.md b/translations/README-ru.md index e00c228..f1d1060 100644 --- a/translations/README-ru.md +++ b/translations/README-ru.md @@ -33,12 +33,12 @@ > Регулярное выражение - это группа букв или символов, которая используется для поиска определенного шаблона в тексте. -Регулярное выражение - это шаблон, сопоставляемый с искомой строкой слева направо. -Термин «Регулярное выражение» сложно произносить каждый раз, поэтому, обычно, вы будете сталкиваться с сокращениями "регэкспы" или "регулярки". +Регулярное выражение - это шаблон, сопоставляемый с искомой строкой слева направо. +Термин «Регулярное выражение» сложно произносить каждый раз, поэтому, обычно, вы будете сталкиваться с сокращениями "регэкспы" или "регулярки". Регулярные выражения используются для замен текста внутри строк, валидации форм, извлечений подстрок по определенным шаблонам и множества других вещей. -Представьте, что вы пишете приложение и хотите установить правила, по которым пользователь выбирает свой юзернейм. Мы хотим, чтобы имя пользователя содержало буквы, цифры, подчеркивания и дефисы. Мы также хотим ограничить количество символов в имени пользователя, чтобы оно не выглядело безобразно. +Представьте, что вы пишете приложение и хотите установить правила, по которым пользователь выбирает свой юзернейм. Мы хотим, чтобы имя пользователя содержало буквы, цифры, подчеркивания и дефисы. Мы также хотим ограничить количество символов в имени пользователя, чтобы оно не выглядело безобразно. Для этого, используем следующее регулярное выражение: @@ -47,7 +47,7 @@ Regular expression

-Регулярное выражения выше может принимать строки `john_doe`,` jo-hn_doe` и `john12_as`. +Регулярное выражения выше может принимать строки `john_doe`,`jo-hn_doe` и `john12_as`. Оно не валидирует `Jo`, поскольку эта строка содержит заглавные буквы, а также она слишком короткая. ## Содержание @@ -82,8 +82,8 @@ ## 1. Совпадения. -В сущности, регулярное выражение - это просто набор символов, который мы используем для поиска в тексте. -Например, регулярное выражение `the` состоит из буквы` t`, за которой следует буква `h`, за которой следует буква `e`. +В сущности, регулярное выражение - это просто набор символов, который мы используем для поиска в тексте. +Например, регулярное выражение `the` состоит из буквы `t`, за которой следует буква `h`, за которой следует буква `e`.
 "the" => The fat cat sat on the mat.
@@ -91,9 +91,9 @@
 
 [Запустить регулярное выражение](https://regex101.com/r/dmRygT/1)
 
-Регулярное выражение `123` соответствует строке` 123`. Регулярное выражение сопоставляется с входной строкой, сравнивая 
-каждый символ в регулярном выражении с каждым символом во входной строке по одному символу за другим. Регулярные выражения 
-обычно чувствительны к регистру, поэтому регулярное выражение `The` не будет соответствовать строке` the`.
+Регулярное выражение `123` соответствует строке `123`. Регулярное выражение сопоставляется с входной строкой, сравнивая
+каждый символ в регулярном выражении с каждым символом во входной строке по одному символу за другим. Регулярные выражения
+обычно чувствительны к регистру, поэтому регулярное выражение `The` не будет соответствовать строке `the`.
 
 
 "The" => The fat cat sat on the mat.
@@ -104,7 +104,7 @@
 ## 2. Метасимволы
 
 Метасимволы это блоки, из которых строятся регулярные выражения. Метасимволы не означают что-то сами по себе,
-вместо этого они интерпретируются для распознавания специальных групп символов. Некоторые метасимволы имеют 
+вместо этого они интерпретируются для распознавания специальных групп символов. Некоторые метасимволы имеют
 особые обозначения и пишутся в квадратных скобках. Существуют следующие метасимволы:
 
 |Метасимволы|Описание|
@@ -119,14 +119,14 @@
 |(xyz)|Группа символов. Находить только символы xyz в указанном порядке.|
 |||Чередование. Находить либо буквы до, либо буквы после символа.|
 |\|Экранирование. Позволяет находить зарезервированные символы: [ ] ( ) { } . * + ? ^ $ \ ||
-|^|Обозначает начало пользовательского ввода.| 
+|^|Обозначает начало пользовательского ввода.|
 |$|Обозначает конец пользовательского ввода.|
 
 ## 2.1 Точка
 
 Точка `.` это простейший пример метасимвола. Метасимвол `.`
 находит любой отдельный символ. Точка не будет находить символы перехода или перевода строки.
-Например, регулярное выражение '.ar' обозначает: любой символ, за которым следуют буквы ` a` и `r`.
+Например, регулярное выражение `.ar` обозначает: любой символ, за которым следуют буквы `a` и `r`.
 
 
 ".ar" => The car parked in the garage.
@@ -137,9 +137,9 @@
 ## 2.2 Набор символов.
 
 Набор символов также называется классом символов. Квадратные скобки используются
-для определения набора символов. Дефис используется для указания диапазона символов. 
-Порядок следования символов, заданный в квадратных скобках, не важен. Например, 
-регулярное выражение  `[Tt]he` обозначает заглавную 'T' или строчную 't', за которой следуют буквы 'h' и 'e'.
+для определения набора символов. Дефис используется для указания диапазона символов.
+Порядок следования символов, заданный в квадратных скобках, не важен. Например,
+регулярное выражение `[Tt]he` обозначает заглавную `T` или строчную `t`, за которой следуют буквы `h` и `e`.
 
 
 "[Tt]he" => The car parked in the garage.
@@ -147,8 +147,8 @@
 
 [Запустить регулярное выражение](https://regex101.com/r/2ITLQ4/1)
 
-Точка внутри набора символов, однако, обозначает непосредственно точку, как символ. 
-Регулярное выражение `ar[.]` обозначает строчную 'a', за которой следует 'r', за которой следует '.' (символ точки).
+Точка внутри набора символов, однако, обозначает непосредственно точку, как символ.
+Регулярное выражение `ar[.]` обозначает строчную `a`, за которой следует `r`, за которой следует `.` (символ точки).
 
 
 "ar[.]" => A garage is a good place to park a car.
@@ -158,8 +158,8 @@
 
 ### 2.2.1 Отрицание набора символов
 
-Знак вставки '^' обозначает начало строки, однако, когда вы вписываете его после открытия квадратных скобок, он отрицает набор символов. 
-Например, регулярное выражение `[^c]ar` обозначает любой символ, кроме 'c', за которым следуют буквы 'a' и 'r'.
+Знак вставки `^` обозначает начало строки, однако, когда вы вписываете его после открытия квадратных скобок, он отрицает набор символов.
+Например, регулярное выражение `[^c]ar` обозначает любой символ, кроме `c`, за которым следуют буквы `a` и `r`.
 
 
 "[^c]ar" => The car parked in the garage.
@@ -169,15 +169,15 @@
 
 ## 2.3 Повторения
 
-Символы `+`, `*` or `?` используются для обозначения того, как сколько раз появляется какой-либо подшаблон. 
+Символы `+`, `*` или `?` используются для обозначения того, как сколько раз появляется какой-либо подшаблон.
 Данные метасимволы могут вести себя по-разному, в зависимости от ситуации.
 
 ### 2.3.1 Звёздочка
 
-Символ `*` обозначает ноль или более повторений предыдущего совпадения. 
-Регулярное выражение `a *` означает ноль или более повторений предыдущего
+Символ `*` обозначает ноль или более повторений предыдущего совпадения.
+Регулярное выражение `a*` означает ноль или более повторений предыдущего
 строчного символа `a`. Если же символ появляется после набора или класса символов,
-он находит повторения всего набора символов. Например, регулярное выражение `[a-z] *`
+он находит повторения всего набора символов. Например, регулярное выражение `[a-z]*`
 означает любое количество строчных букв в строке.
 
 
@@ -186,10 +186,10 @@
 
 [Запустить регулярное выражение](https://regex101.com/r/7m8me5/1)
 
-Символы можно комбинировать, так, например, символ `*` может использоваться с метасимволом `.` 
-для поиска одной строки с произвольным содержанием `. * `. Символ `*` может использоваться
-с символом пробела `\ s`, чтобы находить строки с символами пробела. Например, выражение 
-`\ s * cat \ s *` означает: ноль или более пробелов, за которыми следует слово  `cat`,
+Символы можно комбинировать, так, например, символ `*` может использоваться с метасимволом `.`
+для поиска одной строки с произвольным содержанием `.*`. Символ `*` может использоваться
+с символом пробела `\s`, чтобы находить строки с символами пробела. Например, выражение
+`\s*cat\s*` означает: ноль или более пробелов, за которыми следует слово `cat`,
 за которым следует ноль или более символов пробела.
 
 
@@ -200,9 +200,9 @@
 
 ### 2.3.2 Плюс
 
-Символ `+` соответствует одному или более повторению предыдущего символа. Например, 
-регулярное выражение `c.+t` означает строчную `c`, за которой следует по крайней мере один символ, 
-следом за которым идёт символ `t`. Стоит уточнить, что в данном шаблоне, `t` является последним` t` в предложении.
+Символ `+` соответствует одному или более повторению предыдущего символа. Например,
+регулярное выражение `c.+t` означает строчную `c`, за которой следует по крайней мере один символ,
+следом за которым идёт символ `t`. Стоит уточнить, что в данном шаблоне, `t` является последним `t` в предложении.
 
 
 "c.+t" => The fat cat sat on the mat.
@@ -212,9 +212,9 @@
 
 ### 2.3.3 Знак вопроса
 
-В регулярном выражении метасимвол `?` делает предыдущий символ необязательным. 
+В регулярном выражении метасимвол `?` делает предыдущий символ необязательным.
 Этот символ соответствует нулю или одному экземпляру предыдущего символа.
-Например, регулярное выражение `[T]?he` означает  необязательную заглавную букву `T`, за которой следуют символы 'h' и 'e'.
+Например, регулярное выражение `[T]?he` означает необязательную заглавную букву `T`, за которой следуют символы `h` и `e`.
 
 
 "[T]he" => The car is parked in the garage.
@@ -230,9 +230,9 @@
 
 ## 2.4 Фигурные скобки
 
-В фигурных скобках, которые также называются квантификаторами, указывается, 
-сколько раз символ или группа символов могут повторяться. Например, регулярное выражение 
-`[0-9] {2,3}` означает совпадение не менее 2 но не более 3 цифр в диапазоне от 0 до 9.
+В фигурных скобках, которые также называются квантификаторами, указывается,
+сколько раз символ или группа символов могут повторяться. Например, регулярное выражение
+`[0-9]{2,3}` означает совпадение не менее 2 но не более 3 цифр в диапазоне от 0 до 9.
 
 
 "[0-9]{2,3}" => The number was 9.9997 but we rounded it off to 10.0.
@@ -240,9 +240,9 @@
 
 [Запустить регулярное выражение](https://regex101.com/r/juM86s/1)
 
-Уберём второй номер (цифру 3), тогда,  регулярное выражение `[0-9] {2,}` будет означать 
+Уберём второй номер (цифру 3), тогда, регулярное выражение `[0-9]{2,}` будет означать
 совпадение 2 или более цифр. Если мы также удалим запятую, то регулярное выражение
-`[0-9] {3}` будет означать  совпадение точно с 3 цифрами.
+`[0-9]{3}` будет означать совпадение точно с 3 цифрами.
 
 
 "[0-9]{2,}" => The number was 9.9997 but we rounded it off to 10.0.
@@ -260,11 +260,11 @@
 
 Скобочные группы это группы подшаблонов, которые написаны в круглых скобках
 `(...)`. Как мы уже говорили ранее в регулярном выражении, если мы поставим квантификатор
-после символа, он будет повторять предыдущий символ. Но если мы поставим квантификатор после 
-скобочной группы, он будет искать всю группу. Например, регулярное выражение `(ab) *` соответствует
+после символа, он будет повторять предыдущий символ. Но если мы поставим квантификатор после
+скобочной группы, он будет искать всю группу. Например, регулярное выражение `(ab)*` соответствует
 нулю или более повторений символа "ab". Мы также можем использовать метасимвол чередования `|`
 внутри скобочной группы. Например, регулярное выражение `(c|g|p)ar` означает поиск одной из строчных букв `c`,
-`g` или `p`, за которыми следуют буквы 'a' и 'r'.
+`g` или `p`, за которыми следуют буквы `a` и `r`.
 
 
 "(c|g|p)ar" => The car is parked in the garage.
@@ -272,15 +272,15 @@
 
 [Запустить регулярное выражение](https://regex101.com/r/tUxrBG/1)
 
-Обратите внимание, что скобочные группы не только находят, но и захватывают символы для использования на родительском языке. 
+Обратите внимание, что скобочные группы не только находят, но и захватывают символы для использования на родительском языке.
 Родительским языком может быть python, javascript или практически любой язык, который реализует использование регулярных выражений как параметров функций.
 
 ### 2.5.1 Не запоминающие скобочные группы
 
 Бывает так, что группу определить нужно, а вот запоминать их содержимое в массиве не требуется.
-Подобный трюк осуществляется при помощи зарезервированной комбинации `?:` 
-в круглых скобках `(...)`. Например, регулярное выражение `(?:c|g|p)ar` будет находить такие же шаблоны как и 
-`(c|g|p)ar`, однако скобочная группа при этом создана не будет. 
+Подобный трюк осуществляется при помощи зарезервированной комбинации `?:`
+в круглых скобках `(...)`. Например, регулярное выражение `(?:c|g|p)ar` будет находить такие же шаблоны как и
+`(c|g|p)ar`, однако скобочная группа при этом создана не будет.
 
 
 "(?:c|g|p)ar" => The car is parked in the garage.
@@ -289,16 +289,16 @@
 [Запустить регулярное выражение](https://regex101.com/r/Rm7Me8/1)
 
 Не запоминающиеся группы пригодиться, когда они используются в функциях поиска и замены
-или в сочетании со скобочными группами, например, для предпросмотра при создании скобочной группы или другого вида выходных данных, 
+или в сочетании со скобочными группами, например, для предпросмотра при создании скобочной группы или другого вида выходных данных,
 смотрите также [4. Опережающие и ретроспективные проверки](#4-опережающие-и-ретроспективные-проверки).
 
 ## 2.6 Альтернация
 
 В регулярных выражениях, вертикальная черта `|` используется для определения альтернации (чередования).
 Альтернация по своей сути похожа на оператор ИЛИ между логическими выражениями. Может создаться впечатление, что
-чередование это то же самое, что и определение набора символов. Однако, большая разница между ними в том, что 
+чередование это то же самое, что и определение набора символов. Однако, большая разница между ними в том, что
 набор символов работает на уровне конкретных символов, в то время как альтернация работает на уровне выражений.
-Например, регулярное выражение `(T|t)he|car` объединяет два шаблона (заглавная `T` ИЛИ строчная `t`, с продолжением из 'h' и 'e') и шаблон
+Например, регулярное выражение `(T|t)he|car` объединяет два шаблона (заглавная `T` ИЛИ строчная `t`, с продолжением из `h` и `e`) и шаблон
 (строчная `c`, затем строчная `a`, за которой следует строчная `r`). Таким образом, в поиске будет участвовать любой из данных шаблонов,
 по аналогии с логической операцией ИЛИ в программировании и алгебре выражений.
 
@@ -310,13 +310,13 @@
 
 ## 2.7 Экранирование спецсимволов
 
-Обратный слэш `\` используется в регулярных выражениях для экранирования следующего символа. 
-Это позволяет формировать шаблоны с поиском зарезервированных символов, таких как `{ } [ ] / \ + * . $ ^ | ?`. 
-Для использования спецсимвола в шаблоне необходимо указать символ '\' перед ним.
+Обратный слэш `\` используется в регулярных выражениях для экранирования следующего символа.
+Это позволяет формировать шаблоны с поиском зарезервированных символов, таких как `{ } [ ] / \ + * . $ ^ | ?`.
+Для использования спецсимвола в шаблоне необходимо указать символ `\` перед ним.
 
-Как упомянуто выше, символ `.` является зарезервированным и соответствует любому значению, кроме символа новой строки. 
+Как упомянуто выше, символ `.` является зарезервированным и соответствует любому значению, кроме символа новой строки.
 Бывают ситуации, когда необходимо найти точку в предложении, для таких случаев применимо экранирование. Рассмотрим выражение
-`(f|c|m)at\.?`, что соответствует следующему шаблону: строчный символ `f`, `c` или `m`,  за которым следует строчные буквы `a` и `t`, с опциональной `.` точкой в конце.
+`(f|c|m)at\.?`, что соответствует следующему шаблону: строчный символ `f`, `c` или `m`, за которым следует строчные буквы `a` и `t`, с опциональной `.` точкой в конце.
 
 
 "(f|c|m)at\.?" => The fat cat sat on the mat.
@@ -326,19 +326,19 @@
 
 ## 2.8 Якоря
 
-Понятие якорей в регулярных выражениях используется для обозначения проверок, является ли 
+Понятие якорей в регулярных выражениях используется для обозначения проверок, является ли
 соответствующий символ начальным или конечным символом входной строки. Якоря бывают двух типов:
 Первый тип - Каретка `^`, проверяет, является ли соответствующий символ начальным символом в тексте.
 Второй тип - Доллар `$`, проверяет, является ли соответствующий символ последним символом входной строки.
 
 ### 2.8.1 Каретка
 
-Символ каретки `^` используется для проверки, является ли соответствующий символ первым символом входной строки. 
+Символ каретки `^` используется для проверки, является ли соответствующий символ первым символом входной строки.
 Если мы применяем следующее регулярное выражение `^a` (если a является начальным символом) для строки `abc`,
 совпадение будет соответствовать букве `a`. Если же мы используем регулярное выражение `^b` на той же строке,
-мы не получим совпадения, поскольку во входящей строке  `abc` "b"  не является первым символом. Рассмотрим другое
+мы не получим совпадения, поскольку во входящей строке `abc` "b" не является первым символом. Рассмотрим другое
 регулярное выражение: `^(T|t)he`, обозначающее заглавную `T` или строчную `t` как первый символ, за которым следуют
-символы букв 'h' и 'e'. Cоответственно:
+символы букв `h` и `e`. Cоответственно:
 
 
 "(T|t)he" => The car is parked in the garage.
@@ -371,10 +371,10 @@
 
 [Запустить регулярное выражение](https://regex101.com/r/t0AkOd/1)
 
-##  3. Наборы сокращений и диапазоны
+## 3. Наборы сокращений и диапазоны
 
 Регулярные выражения предоставляют сокращения для часто используемых наборов символов,
-которые предлагают удобные сокращения для часто используемых регулярных выражений. 
+которые предлагают удобные сокращения для часто используемых регулярных выражений.
 Наборы сокращенных символов следующие:
 
 |Сокращение|Описание|
@@ -389,12 +389,12 @@
 
 ## 4. Опережающие и ретроспективные проверки
 
-Опережающие и ретроспективные проверки (в английской литературе lookbehind, lookahead) это особый вид 
-***не запоминающих скобочных групп*** (находящих совпадения, но не добавляющих в массив). 
+Опережающие и ретроспективные проверки (в английской литературе lookbehind, lookahead) это особый вид
+***не запоминающих скобочных групп*** (находящих совпадения, но не добавляющих в массив).
 Данные проверки используются, мы знаем, что шаблон предшествует или сопровождается другим шаблоном.
 Например, мы хотим получить получить цену в долларах `$`, из следующей входной строки
 `$4.44 and $10.88`. Для этого используем следующее регулярное выражение `(?<=\$)[0-9\.]*`, означающее
-получение всех дробных (с точкой `.`) цифр, которым предшествует знак доллара `$`. Существуют 
+получение всех дробных (с точкой `.`) цифр, которым предшествует знак доллара `$`. Существуют
 следующие виды проверок:
 
 |Символ|Описание|
@@ -407,11 +407,11 @@
 ### 4.1 Положительное опережающее условие
 
 Положительное опережающее утверждение (assert) означает, что за первой частью выражения должно следовать
-опережающее выражение (lookahead expression). (по аналогии с условиями, if (..) then (..)). 
-Возвращенное совпадение содержит только текст, который соответствует первой части выражения. 
+опережающее выражение (lookahead expression). (по аналогии с условиями, if (..) then (..)).
+Возвращенное совпадение содержит только текст, который соответствует первой части выражения.
 Для определения положительного опережающего условия используются круглые скобки. В этих скобках используется
-знак вопроса со знаком равенства: `(?=...)`. Опережающее выражение, записывается в скобках после знака равенства. 
-Рассмотрим пример регулярного выражения:  `(T|t)he(?=\sfat)`, обозначающее опциональное наличие строчной `t` или заглавной `T`, 
+знак вопроса со знаком равенства: `(?=...)`. Опережающее выражение, записывается в скобках после знака равенства.
+Рассмотрим пример регулярного выражения: `(T|t)he(?=\sfat)`, обозначающее опциональное наличие строчной `t` или заглавной `T`,
 следом буквы `h` и `e`. В скобках, мы определяем положительное опережающее условие, которое сообщает движку регулярных выражений
 информацию о том, что после шаблона `The` или `the` будет следовать слово `fat`.
 
@@ -423,7 +423,7 @@
 
 ### 4.2 Отрицательное опережающее условие
 
-Отрицательное опережающее условие работает по обратному принципу: используется, когда нам нужно получить 
+Отрицательное опережающее условие работает по обратному принципу: используется, когда нам нужно получить
 все совпадения из входной строки, за которыми НЕ следует определенный шаблон. Отрицательное опережающее условие
 определяется таким же образом, как и позитивное, с той лишь разницей, что вместо равенства `=` мы ставим
 восклицательный знак `!` (отрицание) например: `(?!...)`. Рассмотрим выражение `(T|t)he(?!\sfat)`, в котором мы
@@ -438,8 +438,8 @@
 ### 4.3 Положительное ретроспективное условие
 
 Положительное ретроспективное условие используется чтобы найти все совпадения, которым предшествует
-определенный шаблон. Условие определяется как `(?<=...)`. Например, выражение `(?<=(T|t)he\s)(fat|mat)` означает, 
-найти все слова `fat` или `mat` из входной строки, которым предшествует слово `The` or `the`.
+определенный шаблон. Условие определяется как `(?<=...)`. Например, выражение `(?<=(T|t)he\s)(fat|mat)` означает,
+найти все слова `fat` или `mat` из входной строки, которым предшествует слово `The` или `the`.
 
 
 "(?<=(T|t)he\s)(fat|mat)" => The fat cat sat on the mat.
@@ -461,7 +461,7 @@
 
 ## 5. Флаги
 
-Флаги, также называемые модификаторами, изменяют вывод регулярного выражения. 
+Флаги, также называемые модификаторами, изменяют вывод регулярного выражения.
 Эти флаги могут быть использованы в любом порядке или комбинации, и являются
 неотъемлемой частью регулярных выражений.
 
@@ -474,8 +474,8 @@
 ### 5.1 Поиск без учета регистра
 
 Модификатор `i` используется для поиска без учета регистра. Например, регулярное выражение
-`/The/gi` означает заглавную `T` следом строчные `h` и `e`. В конце регулярного выражения флаг `i`, 
-указывающий движку регулярных выражений игнорировать регистр. Помимо  `i`, для поиска шаблона во
+`/The/gi` означает заглавную `T` следом строчные `h` и `e`. В конце регулярного выражения флаг `i`,
+указывающий движку регулярных выражений игнорировать регистр. Помимо `i`, для поиска шаблона во
 всем входном тексте, использован флаг `g`.
 
 
@@ -493,8 +493,8 @@
 ### 5.2 Глобальный поиск
 
 Модификатор `g` используется для выполнения глобального сопоставления (найти все совпадения, а не останавливаться после первого).
-Например, регулярное выражение `/.(at)/g` означает любой символ кроме символа новой строки, следом строчная `a`, далее строчная `t`. 
-Из-за использования флага `g` в конце регулярного выражения, теперь оно найдет все совпадения во входной строке, а не остановится на первом 
+Например, регулярное выражение `/.(at)/g` означает любой символ кроме символа новой строки, следом строчная `a`, далее строчная `t`.
+Из-за использования флага `g` в конце регулярного выражения, теперь оно найдет все совпадения во входной строке, а не остановится на первом
 (что является поведением по умолчанию).
 
 
@@ -513,9 +513,9 @@
 
 Модификатор `m` используется для многострочного поиска. Как мы обсуждали ранее,
 якоря `(^, $)` используются для проверки, является ли шаблон началом или концом входной строки.
-Но если мы хотим, чтобы якоря работали в каждой строке, мы используем флаг `m`.  Например, 
-регулярное выражение `/at(.)?$/gm` означает строчную  `a`, следом строчная `t` и любой
-символ кроме начала новой строки, идущий опционально (не обязательно). Из-за флага `m` механизм 
+Но если мы хотим, чтобы якоря работали в каждой строке, мы используем флаг `m`. Например,
+регулярное выражение `/at(.)?$/gm` означает строчную `a`, следом строчная `t` и любой
+символ кроме начала новой строки, идущий опционально (не обязательно). Из-за флага `m` механизм
 регулярных выражений будет искать данный шаблон в конце каждой строки в тексте.
 
 
@@ -535,7 +535,7 @@
 [Запустить регулярное выражение](https://regex101.com/r/E88WE2/1)
 
 ## 6. Жадные vs ленивые квантификаторы
-По умолчанию регулярное выражение выполняет жадное сопоставление, то есть оно будет 
+По умолчанию регулярное выражение выполняет жадное сопоставление, то есть оно будет
 искать совпадения как можно дольше. Мы можем использовать `?` для ленивого поиска, который
 будет стремиться быть как можно более коротким по времени.