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 @@
-## 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) -> Регулярное выражение - это группа букв или символов, которая используется для поиска определенного шаблона в тексте. +> Регулярное выражение — это группа букв или символов, которая используется для поиска определенного шаблона в тексте. -Регулярное выражение - это шаблон, сопоставляемый с искомой строкой слева направо. -Термин «Регулярное выражение» сложно произносить каждый раз, поэтому, обычно, вы будете сталкиваться с сокращениями "регэкспы" или "регулярки". +Регулярное выражение — это шаблон, сопоставляемый с искомой строкой слева +направо. Термин "Регулярное выражение" сложно произносить каждый раз, поэтому, +обычно, вы будете сталкиваться с сокращениями "регэкспы" или "регулярки". Регулярные выражения используются для замен текста внутри строк, валидации форм, извлечений подстрок по определенным шаблонам и множества других вещей. -Представьте, что вы пишете приложение и хотите установить правила, по которым пользователь выбирает свой юзернейм. Мы хотим, чтобы имя пользователя содержало буквы, цифры, подчеркивания и дефисы. Мы также хотим ограничить количество символов в имени пользователя, чтобы оно не выглядело безобразно. -Для этого, используем следующее регулярное выражение: +Представьте, что вы пишете приложение и хотите установить правила, по которым +пользователь выбирает свой юзернейм. Мы хотим, чтобы имя пользователя содержало +буквы, цифры, подчеркивания и дефисы. Мы также хотим ограничить количество +символов в имени пользователя, чтобы оно не выглядело безобразно. Для этого +используем следующее регулярное выражение: -- +
-Регулярное выражения выше может принимать строки `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` библиотека регулярных выражений будет искать +данный шаблон в конце каждой строки в тексте.[Запустить регулярное выражение](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 @@"/.at(.)?$/" => The fat @@ -539,30 +569,33 @@ [Запустить регулярное выражение](https://regex101.com/r/E88WE2/1) -## 6. Жадные vs ленивые квантификаторы -По умолчанию регулярное выражение выполняет жадное сопоставление, то есть оно будет -искать совпадения как можно дольше. Мы можем использовать `?` для ленивого поиска, который -будет стремиться быть как можно более коротким по времени. +## 6. Жадная и ленивая квантификация +По умолчанию регулярное выражение выполняет жадное сопоставление, то есть оно +будет искать самые длинные возможные совпадения. Мы можем использовать `?` для +ленивого поиска, который будет искать наименьшие возможные совпадения во входных +данных.[Запустить регулярное выражение](https://regex101.com/r/AyAdgJ/1)-"/(.*at)/" => The fat cat sat on the mat.+"/(.*at)/" => The fat cat sat on the mat. +-"/(.*?at)/" => The fat cat sat on the mat.+"/(.*?at)/" => The fat cat sat on the mat. +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)
- +