From 8518c43af4721383eba9ae3c4aa00606af24c5a2 Mon Sep 17 00:00:00 2001 From: AHOHNMYC <24810600+AHOHNMYC@users.noreply.github.com> Date: Fri, 21 Oct 2022 06:39:52 +0300 Subject: [PATCH 1/3] Russian language update Corrected some grammar and serious logical and factual mistakes. Updated header and footer, translated shields. --- translations/README-ru.md | 405 +++++++++++++++++++++----------------- 1 file changed, 219 insertions(+), 186 deletions(-) diff --git a/translations/README-ru.md b/translations/README-ru.md index 8cfe2c3..1076721 100644 --- a/translations/README-ru.md +++ b/translations/README-ru.md @@ -1,22 +1,14 @@


- - Learn Regex + + Учим регулярки -

-

- - - - - - -

-## Translations: +## Переводы: * [English](../README.md) +* [German](translations/README-de.md) * [Español](../translations/README-es.md) * [Français](../translations/README-fr.md) * [Português do Brasil](../translations/README-pt_BR.md) @@ -32,28 +24,34 @@ * [فارسی](../translations/README-fa.md) * [עברית](translations/README-he.md) + ## Что такое Регулярное выражение? -[![](https://img.shields.io/badge/-Download%20PDF%20-0a0a0a.svg?style=flat&colorA=0a0a0a)](https://gum.co/learn-regex) +[![](https://img.shields.io/badge/Загрузить%20PDF-0a0a0a.svg)](https://gum.co/learn-regex) -> Регулярное выражение - это группа букв или символов, которая используется для поиска определенного шаблона в тексте. +> Регулярное выражение — это группа букв или символов, которая используется для поиска определенного шаблона в тексте. -Регулярное выражение - это шаблон, сопоставляемый с искомой строкой слева направо. -Термин «Регулярное выражение» сложно произносить каждый раз, поэтому, обычно, вы будете сталкиваться с сокращениями "регэкспы" или "регулярки". +Регулярное выражение — это шаблон, сопоставляемый с искомой строкой слева +направо. Термин "Регулярное выражение" сложно произносить каждый раз, поэтому, +обычно, вы будете сталкиваться с сокращениями "регэкспы" или "регулярки". Регулярные выражения используются для замен текста внутри строк, валидации форм, извлечений подстрок по определенным шаблонам и множества других вещей. -Представьте, что вы пишете приложение и хотите установить правила, по которым пользователь выбирает свой юзернейм. Мы хотим, чтобы имя пользователя содержало буквы, цифры, подчеркивания и дефисы. Мы также хотим ограничить количество символов в имени пользователя, чтобы оно не выглядело безобразно. -Для этого, используем следующее регулярное выражение: +Представьте, что вы пишете приложение и хотите установить правила, по которым +пользователь выбирает свой юзернейм. Мы хотим, чтобы имя пользователя содержало +буквы, цифры, подчеркивания и дефисы. Мы также хотим ограничить количество +символов в имени пользователя, чтобы оно не выглядело безобразно. Для этого +используем следующее регулярное выражение: -

+

- Regular expression + Регулярное выражение

-Регулярное выражения выше может принимать строки `john_doe`,`jo-hn_doe` и `john12_as`. -Оно не валидирует `Jo`, поскольку эта строка содержит заглавные буквы, а также она слишком короткая. +Регулярное выражения выше может принимать строки `john_doe`,`jo-hn_doe` и +`john12_as`. Оно не валидирует `Jo`, поскольку эта строка содержит заглавные +буквы, а также она слишком короткая. ## Содержание @@ -68,8 +66,8 @@ - [Знак вопроса](#233-знак-вопроса) - [Фигурные скобки](#24-фигурные-скобки) - [Скобочные группы](#25-скобочные-группы) - - [Альтернация](#26-альтернация) - - [Экранирование](#27-экранирование) + - [Перечисление](#26-перечисление) + - [Экранирование спецсимволов](#27-экранирование-спецсимволов) - [Якоря](#28-якоря) - [Каретка](#281-каретка) - [Доллар](#282-доллар) @@ -83,12 +81,13 @@ - [Поиск без учета регистра](#51-поиск-без-учета-регистра) - [Глобальный поиск](#52-глобальный-поиск) - [Мультистроковый поиск](#53-мультистроковый-поиск) -- [Жадные vs ленивые квантификаторы](#6-жадные-vs-ленивые-квантификаторы) +- [Жадная и ленивая квантификация](#6-жадная-и-ленивая-квантификация) ## 1. Совпадения. -В сущности, регулярное выражение - это просто набор символов, который мы используем для поиска в тексте. -Например, регулярное выражение `the` состоит из буквы `t`, за которой следует буква `h`, за которой следует буква `e`. +В сущности, регулярное выражение — это просто набор символов, который мы +используем для поиска в тексте. Например, регулярное выражение `the` состоит из +буквы `t`, за которой следует буква `h`, за которой следует буква `e`.
 "the" => The fat cat sat on the mat.
@@ -96,9 +95,11 @@
 
 [Запустить регулярное выражение](https://regex101.com/r/dmRygT/1)
 
-Регулярное выражение `123` соответствует строке `123`. Регулярное выражение сопоставляется с входной строкой, сравнивая
-каждый символ в регулярном выражении с каждым символом во входной строке по одному символу за другим. Регулярные выражения
-обычно чувствительны к регистру, поэтому регулярное выражение `The` не будет соответствовать строке `the`.
+Регулярное выражение `123` соответствует строке `123`. Регулярное выражение
+сопоставляется с входной строкой посимвольно. Каждый символ в регулярном
+выражении сравнивается с каждым символом во входной строке, один символ за
+другим. Регулярные выражения обычно чувствительны к регистру, поэтому регулярное
+выражение `The` не будет соответствовать строке `the`.
 
 
 "The" => The fat cat sat on the mat.
@@ -108,30 +109,32 @@
 
 ## 2. Метасимволы
 
-Метасимволы это блоки, из которых строятся регулярные выражения. Метасимволы не означают что-то сами по себе,
-вместо этого они интерпретируются для распознавания специальных групп символов. Некоторые метасимволы имеют
-особые обозначения и пишутся в квадратных скобках. Существуют следующие метасимволы:
+Метасимволы — это строительные блоки для регулярных выражений. Метасимволы не
+ищутся в строке как есть, они интерпретируются особым образом. Некоторые
+метасимволы имеют особое значение и пишутся в квадратных скобках. Существуют
+следующие метасимволы:
 
-|Метасимволы|Описание|
+|Метасимвол|Описание|
 |:----:|----|
-|.|Точка соответствует любому отдельному символу, кроме разрыва строки.|
-|[ ]|Класс символов. Находить любые символы заключенные в квадратных скобках.|
-|[^ ]|Отрицание класа символов. Находить любые символы не заключенные в квадратных скобках.|
-|*|Находить 0 или более повторений предыдущего символа.|
-|+|Находить 1 или более повторений предыдущего символа.|
-|?|Сделать предыдущий символ необязательным.|
-|{n,m}|Скобки. Находить по крайней мере "n" но не более чем "m" повторений предыдущего символа.|
-|(xyz)|Группа символов. Находить только символы xyz в указанном порядке.|
-|||Чередование. Находить либо буквы до, либо буквы после символа.|
-|\|Экранирование. Позволяет находить зарезервированные символы: [ ] ( ) { } . * + ? ^ $ \ ||
+|.|Точка соответствует любому отдельному символу, кроме перевода строки.|
+|[ ]|Класс символов. Заменяет любой из символов, заключенных в квадратных скобках.|
+|[^ ]|Отрицание класа символов. Соответствует любом символу, не содержащемуся в квадратных скобках.|
+|\*|Искать 0 или более повторов предыдущего символа.|
+|+|Искать 1 или более повторов предыдущего символа.|
+|?|Делает предыдущий символ необязательным.|
+|{n,m}|Скобки. Искать не менее "n" и не более "m" повторов предыдущего символа.|
+|(xyz)|Группа символов. Искать только символы xyz в указанном порядке.|
+|||Чередование. Искать либо знаки до этого символа, либо знаки после символа.|
+|\|Экранирование следующего символа. Позволяет искать специальные знаки: [ ] ( ) { } . * + ? ^ $ \ ||
 |^|Обозначает начало пользовательского ввода.|
 |$|Обозначает конец пользовательского ввода.|
 
 ## 2.1 Точка
 
-Точка `.` это простейший пример метасимвола. Метасимвол `.`
-находит любой отдельный символ. Точка не будет находить символы перехода или перевода строки.
-Например, регулярное выражение `.ar` обозначает: любой символ, за которым следуют буквы `a` и `r`.
+Точка `.` — это простейший пример метасимвола. Метасимвол `.`
+находит любой отдельный символ. Точка не будет находить символы возврата каретки
+(CR) или перевода строки (LF). Например, регулярное выражение `.ar` обозначает
+"любой символ, за которым следуют буквы `a` и `r`".
 
 
 ".ar" => The car parked in the garage.
@@ -141,10 +144,11 @@
 
 ## 2.2 Набор символов.
 
-Набор символов также называется классом символов. Квадратные скобки используются
-для определения набора символов. Дефис используется для указания диапазона символов.
-Порядок следования символов, заданный в квадратных скобках, не важен. Например,
-регулярное выражение `[Tt]he` обозначает заглавную `T` или строчную `t`, за которой следуют буквы `h` и `e`.
+Набор символов, также называется классом символов. Для определения набора
+символов используются квадратные скобки. Дефис используется для указания
+диапазона символов. Порядок следования символов, заданный в квадратных скобках,
+не важен. Например, регулярное выражение `[Tt]he` интерпретируется как
+"заглавная `T` или строчная `t`, за которой следуют буквы `h` и `e`".
 
 
 "[Tt]he" => The car parked in the garage.
@@ -152,8 +156,9 @@
 
 [Запустить регулярное выражение](https://regex101.com/r/2ITLQ4/1)
 
-Точка внутри набора символов, однако, обозначает непосредственно точку, как символ.
-Регулярное выражение `ar[.]` обозначает строчную `a`, за которой следует `r`, за которой следует `.` (символ точки).
+Точка внутри набора символов, внезапно, обозначает непосредственно точку как
+символ. Регулярное выражение `ar[.]` обозначает строчную `a`, за которой следует
+`r`, за которой следует `.` (символ точки).
 
 
 "ar[.]" => A garage is a good place to park a car.
@@ -163,8 +168,9 @@
 
 ### 2.2.1 Отрицание набора символов
 
-Знак вставки `^` обозначает начало строки, однако, когда вы вписываете его после открытия квадратных скобок, он отрицает набор символов.
-Например, регулярное выражение `[^c]ar` обозначает любой символ, кроме `c`, за которым следуют буквы `a` и `r`.
+Карет `^` обозначает начало строки, но если вы поставите его после открывающей
+квадратной скобки, он инвертирует набор символов. Например, регулярное выражение
+`[^c]ar` обозначает "любой символ, кроме `c`, за которым следуют буквы `a` и `r`".
 
 
 "[^c]ar" => The car parked in the garage.
@@ -174,16 +180,16 @@
 
 ## 2.3 Повторения
 
-Символы `+`, `*` или `?` используются для обозначения того сколько раз появляется какой-либо подшаблон.
-Данные метасимволы могут вести себя по-разному, в зависимости от ситуации.
+Символы `+`, `*` и `?` используются для обозначения того, сколько раз появляется
+символ перед ними. Эти метасимволы ведут себя в разных ситуациях по-разному.
 
 ### 2.3.1 Звёздочка
 
-Символ `*` обозначает ноль или более повторений предыдущего совпадения.
-Регулярное выражение `a*` означает ноль или более повторений предыдущего
-строчного символа `a`. Если же символ появляется после набора или класса символов,
-он находит повторения всего набора символов. Например, регулярное выражение `[a-z]*`
-означает любое количество строчных букв в строке.
+Символ `*` обозначает ноль или более повторений предыдущего символа. Регулярное
+выражение `a*` толкуется как "ноль или более повторений предыдущего строчного
+символа `a`". Если же символ появляется после набора или класса символов, он
+ищет повторения всего набора символов. Например, регулярное выражение `[a-z]*`
+означает "любое количество строчных букв".
 
 
 "[a-z]*" => The car parked in the garage #21.
@@ -191,11 +197,12 @@
 
 [Запустить регулярное выражение](https://regex101.com/r/7m8me5/1)
 
-Символы можно комбинировать, так, например, символ `*` может использоваться с метасимволом `.`
-для поиска одной строки с произвольным содержанием `.*`. Символ `*` может использоваться
-с символом пробела `\s`, чтобы находить строки с символами пробела. Например, выражение
-`\s*cat\s*` означает: ноль или более пробелов, за которыми следует слово `cat`,
-за которым следует ноль или более символов пробела.
+Символы можно комбинировать. Например, метасимвол `*` может использоваться с
+метасимволом `.` для поиска строки с произвольным содержанием: `.*`. Символ `*`
+может использоваться с символом пробела `\s`, чтобы искать строки с символами
+пробела. Например, выражение `\s*cat\s*` означает: "ноль или более пробелов, за
+которыми следует слово `cat`, за которым следует ноль или более символов
+пробела".
 
 
 "\s*cat\s*" => The fat cat sat on the concatenation.
@@ -205,9 +212,11 @@
 
 ### 2.3.2 Плюс
 
-Символ `+` соответствует одному или более повторению предыдущего символа. Например,
-регулярное выражение `c.+t` означает строчную `c`, за которой следует по крайней мере один символ,
-следом за которым идёт символ `t`. Стоит уточнить, что в данном шаблоне, `t` является последним `t` в предложении.
+Символ `+` соответствует одному или более повторению предыдущего символа.
+Например, регулярное выражение `c.+t` интерпретируется так: "строчная `c`, за
+которой следует по крайней мере один любой символ, следом за которым(и) идёт
+символ `t`. Стоит уточнить, что в данном шаблоне, `t` является последним `t` в
+строке.
 
 
 "c.+t" => The fat cat sat on the mat.
@@ -218,8 +227,9 @@
 ### 2.3.3 Знак вопроса
 
 В регулярном выражении метасимвол `?` делает предыдущий символ необязательным.
-Этот символ соответствует нулю или одному экземпляру предыдущего символа.
-Например, регулярное выражение `[T]?he` означает необязательную заглавную букву `T`, за которой следуют символы `h` и `e`.
+Этот символ соответствует нулю или одному вхождению предыдущего символа.
+Например, регулярное выражение `[T]?he` означает: "необязательная заглавная
+буква `T`, за которой следуют символы `h` и `e`".
 
 
 "[T]he" => The car is parked in the garage.
@@ -236,8 +246,8 @@
 ## 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.
@@ -245,9 +255,9 @@
 
 [Запустить регулярное выражение](https://regex101.com/r/juM86s/1)
 
-Уберём второй номер (цифру 3), тогда, регулярное выражение `[0-9]{2,}` будет означать
-совпадение 2 или более цифр. Если мы также удалим запятую, то регулярное выражение
-`[0-9]{3}` будет означать совпадение точно с 3 цифрами.
+Мы можем опустить второе число (цифру 3), тогда регулярное выражение `[0-9]{2,}`
+будет значить "2 или более цифр". А если мы удалим запятую, регулярное выражение
+`[0-9]{3}` будет искать ровно 3 цифры.
 
 
 "[0-9]{2,}" => The number was 9.9997 but we rounded it off to 10.0.
@@ -263,13 +273,14 @@
 
 ## 2.5 Скобочные группы
 
-Скобочные группы это группы подшаблонов, которые написаны в круглых скобках
-`(...)`. Как мы уже говорили ранее в регулярном выражении, если мы поставим квантификатор
-после символа, он будет повторять предыдущий символ. Но если мы поставим квантификатор после
-скобочной группы, он будет искать всю группу. Например, регулярное выражение `(ab)*` соответствует
-нулю или более повторений символа "ab". Мы также можем использовать метасимвол чередования `|`
-внутри скобочной группы. Например, регулярное выражение `(c|g|p)ar` означает поиск одной из строчных букв `c`,
-`g` или `p`, за которыми следуют буквы `a` и `r`.
+Скобочные группы — это группы подшаблонов, которые написаны в круглых скобках
+`(...)`. Как мы уже говорили ранее, в регулярном выражении, квантификатор после
+символа, ищет повторы символа перед квантификатором. Если мы поставим
+квантификатор после скобочной группы, он будет искать повторы всей группы. К
+примеру, регулярное выражение `(ab)*` соответствует нулю или более повторений
+строки "ab". Мы также можем использовать метасимвол чередования `|` внутри
+скобочной группы. Так, регулярное выражение `(c|g|p)ar` означает: "любая из
+строчных букв `c`, `g` или `p`, за которой следуют буквы `a` и `r`".
 
 
 "(c|g|p)ar" => The car is parked in the garage.
@@ -277,15 +288,18 @@
 
 [Запустить регулярное выражение](https://regex101.com/r/tUxrBG/1)
 
-Обратите внимание, что скобочные группы не только находят, но и захватывают символы для использования на родительском языке.
-Родительским языком может быть python, javascript или практически любой язык, который реализует использование регулярных выражений как параметров функций.
+Обратите внимание, что скобочные группы не только находят, но и захватывают
+символы для использования в языке программирования. Таким языком может быть
+Python, JavaScript и практически любой язык, в котором регулярные выражения
+можно использовать в параметрах функций.
 
-### 2.5.1 Не запоминающие скобочные группы
+### 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.
@@ -293,19 +307,20 @@
 
 [Запустить регулярное выражение](https://regex101.com/r/Rm7Me8/1)
 
-Незапоминающиеся группы могут пригодиться, когда они используются в функциях поиска и замены,
-или в сочетании со скобочными группами, например, для предпросмотра при создании скобочной группы или другого вида выходных данных,
-смотрите также [4. Опережающие и ретроспективные проверки](#4-опережающие-и-ретроспективные-проверки).
+Незахватывающие группы могут пригодиться, в ситуациях типа найти-и-заменить, или
+вместе со скобочными группами, чтобы не засорять массив из захваченных данных
+ненужными строками. Смотрите также [4. Опережающие и ретроспективные проверки](#4-опережающие-и-ретроспективные-проверки).
 
-## 2.6 Альтернация
+## 2.6 Перечисление
 
-В регулярных выражениях, вертикальная черта `|` используется для определения альтернации (чередования).
-Альтернация по своей сути похожа на оператор ИЛИ между логическими выражениями. Может создаться впечатление, что
-чередование это то же самое, что и определение набора символов. Однако, большая разница между ними в том, что
-набор символов работает на уровне конкретных символов, в то время как альтернация работает на уровне выражений.
-Например, регулярное выражение `(T|t)he|car` объединяет два шаблона (заглавная `T` ИЛИ строчная `t`, с продолжением из `h` и `e`) и шаблон
-(строчная `c`, затем строчная `a`, за которой следует строчная `r`). Таким образом, в поиске будет участвовать любой из данных шаблонов,
-по аналогии с логической операцией ИЛИ в программировании и алгебре выражений.
+В регулярных выражениях вертикальная черта `|` используется для определения
+перечисления (выбора). Перечисление похоже на оператор ИЛИ между выражениями.
+Может создаться впечатление, что перечисление — это то же, что и набор символов.
+Но набор символов работает на уровне конкретных символов, а перечисление
+работает на уровне выражений. К примеру, регулярное выражение `(T|t)he|car`
+значит: либо "заглавная `T` ИЛИ строчная `t`, с продолжением из `h` и `e`", либо
+"строчная `c`, затем строчная `a`, за которой следует строчная `r`". Во входных
+данных будут искаться оба шаблона, для удобства заключённые в кавычки.
 
 
 "(T|t)he|car" => The car is parked in the garage.
@@ -315,13 +330,15 @@
 
 ## 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.
@@ -331,19 +348,22 @@
 
 ## 2.8 Якоря
 
-Понятие якорей в регулярных выражениях используется для обозначения проверок, является ли
-соответствующий символ начальным или конечным символом входной строки. Якоря бывают двух типов:
-Первый тип - Каретка `^`, проверяет, является ли соответствующий символ начальным символом в тексте.
-Второй тип - Доллар `$`, проверяет, является ли соответствующий символ последним символом входной строки.
+Якоря в регулярных выражениях используются для проверки, является ли
+соответствующий символ первым или последним символом входной строки. Есть два
+типа якорей: каретка `^` — проверяет, является ли соответствующий символ первым
+символом в тексте, и доллар `$` — проверяет, является ли соответствующий символ
+последним символом входной строки.
 
 ### 2.8.1 Каретка
 
-Символ каретки `^` используется для проверки, является ли соответствующий символ первым символом входной строки.
-Если мы применяем следующее регулярное выражение `^a` (если a является начальным символом) для строки `abc`,
-совпадение будет соответствовать букве `a`. Если же мы используем регулярное выражение `^b` на той же строке,
-мы не получим совпадения, поскольку во входящей строке `abc` "b" не является первым символом. Рассмотрим другое
-регулярное выражение: `^(T|t)he`, обозначающее заглавную `T` или строчную `t` как первый символ, за которым следуют
-символы букв `h` и `e`. Cоответственно:
+Символ каретки `^` используется для проверки, является ли соответствующий символ
+первым символом входной строки. Если мы применяем следующее регулярное выражение
+`^a` ('a' является первым символом) для строки `abc`, совпадение будет
+соответствовать букве `a`. Если же мы используем регулярное выражение `^b` на
+той же строке, мы не получим совпадения, поскольку во входящей строке `abc` "b"
+не является первым символом. Рассмотрим другое регулярное выражение: `^(T|t)he`,
+оно значит "заглавная `T` или строчная `t` как первый символ, за которым следуют
+буквы `h` и `e`". Cоответственно:
 
 
 "(T|t)he" => The car is parked in the garage.
@@ -360,9 +380,9 @@
 ### 2.8.2 Доллар
 
 Символ доллара `$` используется для проверки, является ли соответствующий символ
-последним символом входной строки. Например, регулярное выражение `(at\.)$` последовательность из
-строчной `a`, строчной `t`, и точки `.`, ключевой момент в том, что благодаря доллару этот шаблон будет
-находить совпадения только в том случае, если будет наблюдаться в конце строки. Например:
+последним символом входной строки. Например, регулярное выражение `(at\.)$`
+значит: "последовательность из строчной `a`, строчной `t`, точки `.`, находящая
+в конце строки". Пример:
 
 
 "(at\.)" => The fat cat. sat. on the mat.
@@ -378,29 +398,28 @@
 
 ## 3. Наборы сокращений и диапазоны
 
-Регулярные выражения предоставляют сокращения для часто используемых наборов символов,
-которые предлагают удобные сокращения для часто используемых регулярных выражений.
-Наборы сокращенных символов следующие:
+В регулярных выражениях есть сокращения для часто используемых наборов символов:
 
 |Сокращение|Описание|
 |:----:|----|
-|.|Любой символ кроме символа новой строки|
-|\w|Поиск буквенно-цифрового диапазона символов: `[a-zA-Z0-9_]`|
-|\W|Поиск не буквенно-цифрового диапазона символов: `[^\w]`|
-|\d|Поиск цифр: `[0-9]`|
+|.|Любой символ, кроме символа перевода строки|
+|\w|Английская буква либо цифра: `[a-zA-Z0-9_]`|
+|\W|Любой символ, кроме английских букв и цифр: `[^\w]`|
+|\d|Цифра: `[0-9]`|
 |\D|Поиск всего, что не является цифрой: `[^\d]`|
-|\s|Поиск пробелов и символов начала строки: `[\t\n\f\r\p{Z}]`|
-|\S|Поиск всего кроме пробелов и символов начала строки: `[^\s]`|
+|\s|Пробел либо символ начала строки: `[\t\n\f\r\p{Z}]`|
+|\S|Любой символ, кроме пробела и символа начала строки: `[^\s]`|
 
 ## 4. Опережающие и ретроспективные проверки
 
-Опережающие и ретроспективные проверки (в английской литературе lookbehind, lookahead) это особый вид
-***не запоминающих скобочных групп*** (находящих совпадения, но не добавляющих в массив).
-Данные проверки используются когда мы знаем, что шаблон предшествует или сопровождается другим шаблоном.
-Например, мы хотим получить цену в долларах `$` из следующей входной строки
-`$4.44 and $10.88`. Для этого используем следующее регулярное выражение `(?<=\$)[0-9\.]*`, означающее
-получение всех дробных (с точкой `.`) цифр, которым предшествует знак доллара `$`. Существуют
-следующие виды проверок:
+Опережающие и ретроспективные проверки (lookbehind, lookahead) — это особый вид
+***незахватывающих скобочных групп*** (находящих совпадения, но не добавляющих
+в массив совпадений). Данные проверки используются, когда мы знаем, что шаблон
+предшествует или сопровождается другим шаблоном. Например, мы хотим получить
+цену в долларах `$` из следующей входной строки `$4.44 and $10.88`. Для этого
+используем следующее регулярное выражение `(?<=\$)[0-9\.]*`, означающее
+получение всех дробных (с точкой `.`) цифр, которым предшествует знак доллара
+`$`. Существуют следующие виды проверок:
 
 |Символ|Описание|
 |:----:|----|
@@ -411,14 +430,17 @@
 
 ### 4.1 Положительное опережающее условие
 
-Положительное опережающее утверждение (assert) означает, что за первой частью выражения должно следовать
-опережающее выражение (lookahead expression). (по аналогии с условиями, if (..) then (..)).
-Возвращенное совпадение содержит только текст, который соответствует первой части выражения.
-Для определения положительного опережающего условия используются круглые скобки. В этих скобках используется
-знак вопроса со знаком равенства: `(?=...)`. Опережающее выражение, записывается в скобках после знака равенства.
-Рассмотрим пример регулярного выражения: `(T|t)he(?=\sfat)`, обозначающее опциональное наличие строчной `t` или заглавной `T`,
-следом буквы `h` и `e`. В скобках, мы определяем положительное опережающее условие, которое сообщает движку регулярных выражений
-информацию о том, что после шаблона `The` или `the` будет следовать слово `fat`.
+Положительное опережающее условие требует, чтобы за первой частью выражения
+обязательно следовало выражение из условия. Возвращенное совпадение содержит
+только текст, который соответствует первой части выражения. Для определения
+положительного опережающего условия используются круглые скобки. В этих скобках
+используется знак вопроса со знаком равенства: `(?=...)`. Опережающее выражение
+записывается внутри скобок после знака равенства. Рассмотрим пример регулярного
+выражения: `(T|t)he(?=\sfat)` "заглавная `T` или строчная `t`, следом буквы `h`
+и `e`. Всё это должно быть перед пробелом и словом 'fat'". В скобках мы
+определяем положительное опережающее условие, которое говорит библиотеке
+регулярных выражений о том, что после шаблона `The` или `the` будет следовать
+слово `fat`.
 
 
 "(T|t)he(?=\sfat)" => The fat cat sat on the mat.
@@ -428,11 +450,13 @@
 
 ### 4.2 Отрицательное опережающее условие
 
-Отрицательное опережающее условие работает по обратному принципу: используется, когда нам нужно получить
-все совпадения из входной строки, за которыми НЕ следует определенный шаблон. Отрицательное опережающее условие
-определяется таким же образом, как и позитивное, с той лишь разницей, что вместо равенства `=` мы ставим
-восклицательный знак `!` (отрицание) например: `(?!...)`. Рассмотрим выражение `(T|t)he(?!\sfat)`, в котором мы
-находим все `The` или `the` слова из входной строки, за которыми не следует слово `fat`.
+Отрицательное опережающее условие работает по обратному принципу: используется,
+когда нам нужно получить все совпадения из входной строки, за которыми НЕ
+следует определенный шаблон. Отрицательное опережающее условие определяется
+таким же образом, как и положительное, с той лишь разницей, что вместо равенства
+`=` мы ставим восклицательный знак `!` (логическое отрицание): `(?!...)`.
+Пример: `(T|t)he(?!\sfat)` — ищем слова `The` или `the`, за которыми не следует
+пробел и слово `fat`.
 
 
 "(T|t)he(?!\sfat)" => The fat cat sat on the mat.
@@ -442,9 +466,10 @@
 
 ### 4.3 Положительное ретроспективное условие
 
-Положительное ретроспективное условие используется чтобы найти все совпадения, которым предшествует
-определенный шаблон. Условие определяется как `(?<=...)`. Например, выражение `(?<=(T|t)he\s)(fat|mat)` означает,
-найти все слова `fat` или `mat` из входной строки, которым предшествует слово `The` или `the`.
+Положительное ретроспективное условие используется чтобы найти все совпадения,
+которым предшествует определенный шаблон. Условие определяется как `(?<=...)`.
+Например, выражение `(?<=(T|t)he\s)(fat|mat)` означает: "найти все слова `fat`
+или `mat` из входной строки, которым предшествует слово `The` или `the`".
 
 
 "(?<=(T|t)he\s)(fat|mat)" => The fat cat sat on the mat.
@@ -454,9 +479,10 @@
 
 ### 4.4 Отрицательное ретроспективное условие
 
-Отрицательное ретроспективное условие используется чтобы найти все совпадения, которым НЕ предшествует
-определенный шаблон. Условие определяется как `(?
 "(?<!(T|t)he\s)(cat)" => The cat sat on cat.
@@ -466,22 +492,23 @@
 
 ## 5. Флаги
 
-Флаги, также называемые модификаторами, изменяют вывод регулярного выражения.
-Эти флаги могут быть использованы в любом порядке или комбинации, и являются
-неотъемлемой частью регулярных выражений.
+Флаги, также называемые модификаторами, изменяют принцип работы регулярного
+выражения. Эти флаги могут быть использованы в любом порядке или комбинации, и
+являются неотъемлемой частью регулярных выражений.
 
 |Флаг|Описание|
 |:----:|----|
-|i|Поиск без учета регистра|
-|g|Глобальный поиск: поиск шаблона во всем входном тексте|
-|m|Мультистроковый поиск: Якоря применяются к каждой строке.|
+|i|Поиск без учета регистра.|
+|g|Глобальный поиск: искать все вхождения шаблона в тексте, а не только первое совпадение.|
+|m|Мультистроковый поиск: якоря применяются к строкам, а не ко всему тексту.|
 
 ### 5.1 Поиск без учета регистра
 
-Модификатор `i` используется для поиска без учета регистра. Например, регулярное выражение
-`/The/gi` означает заглавную `T` следом строчные `h` и `e`. В конце регулярного выражения флаг `i`,
-указывающий движку регулярных выражений игнорировать регистр. Помимо `i`, для поиска шаблона во
-всем входном тексте, использован флаг `g`.
+Модификатор `i` используется для поиска без учета регистра. Например, регулярное
+выражение `/The/gi` означает заглавную `T` следом строчные `h` и `e`. В конце
+регулярного выражения флаг `i`, указывающий библиотеке регулярных выражений
+игнорировать регистр символов. Дополнительно для поиска шаблона во всем входном
+тексте, использован флаг `g`.
 
 
 "The" => The fat cat sat on the mat.
@@ -497,10 +524,12 @@
 
 ### 5.2 Глобальный поиск
 
-Модификатор `g` используется для выполнения глобального сопоставления (найти все совпадения, а не останавливаться после первого).
-Например, регулярное выражение `/.(at)/g` означает любой символ кроме символа новой строки, следом строчная `a`, далее строчная `t`.
-Из-за использования флага `g` в конце регулярного выражения, теперь оно найдет все совпадения во входной строке, а не остановится на первом
-(что является поведением по умолчанию).
+Модификатор `g` используется для выполнения глобального сопоставления (найти все
+совпадения, а не останавливаться после первого). К примеру, регулярное выражение
+`/.(at)/g` означает: "любой символ (кроме начала новой строки), следом строчная
+`a` и `t`". Благодаря флагу `g`, такое регулярное выражение найдёт все
+совпадения во входной строке, а не остановится на первом (что является
+поведением по умолчанию).
 
 
 "/.(at)/" => The fat cat sat on the mat.
@@ -517,11 +546,12 @@
 ### 5.3 Мультистроковый поиск
 
 Модификатор `m` используется для многострочного поиска. Как мы обсуждали ранее,
-якоря `(^, $)` используются для проверки, является ли шаблон началом или концом входной строки.
-Но если мы хотим, чтобы якоря работали в каждой строке, мы используем флаг `m`. Например,
-регулярное выражение `/at(.)?$/gm` означает строчную `a`, следом строчная `t` и любой
-символ кроме начала новой строки, идущий опционально (не обязательно). Из-за флага `m` механизм
-регулярных выражений будет искать данный шаблон в конце каждой строки в тексте.
+якоря `(^, $)` используются для проверки, является ли шаблон началом или концом
+входных данных. Но если мы хотим, чтобы якоря работали в каждой строке, мы
+используем флаг `m`. Например, регулярное выражение `/at(.)?$/gm` означает:
+"строчная `a`, следом строчная `t` и необязательный любой символ (кроме начала
+новой строки)". Благодаря флагу `m` библиотека регулярных выражений будет искать
+данный шаблон в конце каждой строки в тексте.
 
 
 "/.at(.)?$/" => The fat
@@ -539,30 +569,33 @@
 
 [Запустить регулярное выражение](https://regex101.com/r/E88WE2/1)
 
-## 6. Жадные vs ленивые квантификаторы
-По умолчанию регулярное выражение выполняет жадное сопоставление, то есть оно будет
-искать совпадения как можно дольше. Мы можем использовать `?` для ленивого поиска, который
-будет стремиться быть как можно более коротким по времени.
+## 6. Жадная и ленивая квантификация
+По умолчанию регулярное выражение выполняет жадное сопоставление, то есть оно
+будет искать самые длинные возможные совпадения. Мы можем использовать `?` для
+ленивого поиска, который будет искать наименьшие возможные совпадения во входных
+данных.
 
 
-"/(.*at)/" => The fat cat sat on the mat. 
+"/(.*at)/" => The fat cat sat on the mat. +
[Запустить регулярное выражение](https://regex101.com/r/AyAdgJ/1)
-"/(.*?at)/" => The fat cat sat on the mat. 
+"/(.*?at)/" => The fat cat sat on the mat. +
[Запустить регулярное выражение](https://regex101.com/r/AyAdgJ/2) -## Содействие +## Участвуйте в жизни репозитория -* Вы можете открыть пулл реквест с улучшением -* Обсуждать идеи в issues -* Распространять ссылку на репозиторий -* Получить обратную связь через [![Twitter URL](https://img.shields.io/twitter/url/https/twitter.com/ziishaned.svg?style=social&label=Follow%20%40ziishaned)](https://twitter.com/ziishaned) +* Откройте пулл реквест с исправлением +* Обсуждайте идеи в issues +* Распространяйте знания и ссылку на репозиторий +* Приходите с отзывами к [![@ziishaned в Twitter](https://img.shields.io/twitter/url/https/twitter.com/ziishaned.svg?style=social&label=%40ziishaned)](https://twitter.com/ziishaned) ## Лицензия From 70659cf5c5b8196368b173ca6f9b2d2b3cf98d77 Mon Sep 17 00:00:00 2001 From: AHOHNMYC <24810600+AHOHNMYC@users.noreply.github.com> Date: Fri, 21 Oct 2022 07:09:58 +0300 Subject: [PATCH 2/3] [ru] Remove extra space --- translations/README-ru.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/translations/README-ru.md b/translations/README-ru.md index 1076721..74b983f 100644 --- a/translations/README-ru.md +++ b/translations/README-ru.md @@ -1,6 +1,6 @@


- + Учим регулярки

From 92fe3f245930190c71e006afee0f0af9cc58da08 Mon Sep 17 00:00:00 2001 From: AHOHNMYC <24810600+AHOHNMYC@users.noreply.github.com> Date: Sun, 23 Oct 2022 09:20:09 +0300 Subject: [PATCH 3/3] [ru] Fix link to German translation --- translations/README-ru.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/translations/README-ru.md b/translations/README-ru.md index 74b983f..1f4025c 100644 --- a/translations/README-ru.md +++ b/translations/README-ru.md @@ -8,7 +8,7 @@ ## Переводы: * [English](../README.md) -* [German](translations/README-de.md) +* [German](../translations/README-de.md) * [Español](../translations/README-es.md) * [Français](../translations/README-fr.md) * [Português do Brasil](../translations/README-pt_BR.md)