From 982462b60165b370bf864bc416455276dc2668b2 Mon Sep 17 00:00:00 2001 From: mrtheyann Date: Sun, 7 Jul 2019 21:21:11 +0500 Subject: [PATCH] Translate to Russian (#142) --- img/regexp-ru.png | Bin 0 -> 17905 bytes translations/README-ru.md | 565 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 565 insertions(+) create mode 100644 img/regexp-ru.png create mode 100644 translations/README-ru.md diff --git a/img/regexp-ru.png b/img/regexp-ru.png new file mode 100644 index 0000000000000000000000000000000000000000..a28870ccdda15091fc187f8a181d1f0a9a8e828e GIT binary patch literal 17905 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 literal 0 HcmV?d00001 diff --git a/translations/README-ru.md b/translations/README-ru.md new file mode 100644 index 0000000..7828830 --- /dev/null +++ b/translations/README-ru.md @@ -0,0 +1,565 @@ +

+ + + + + + +

+

+ +## Translations: + +* [English](README.md) +* [Español](translations/README-es.md) +* [Français](translations/README-fr.md) +* [Português do Brasil](translations/README-pt_BR.md) +* [中文版](translations/README-cn.md) +* [日本語](translations/README-ja.md) +* [한국어](translations/README-ko.md) +* [Turkish](translations/README-tr.md) +* [Greek](translations/README-gr.md) +* [Magyar](translations/README-hu.md) +* [Polish](translations/README-pl.md) +* [Русский](translations/README-ru.md) + +## Что такое Регулярное выражение? + +> Регулярное выражение - это группа букв или символов, которая используется для поиска определенного шаблона в тексте. + +Регулярное выражение - это шаблон, сопоставляемый с искомой строкой слева направо. +Термин «Регулярное выражение» сложно произносить каждый раз, поэтому, обычно, вы будете сталкиваться с сокращениями "регэкспы" или "регулярки". +Регулярные выражения используются для замен текста внутри строк, валидации форм, +извлечений подстрок по определенным шаблонам и множества других вещей. + +Представьте, что вы пишете приложение и хотите установить правила, по которым пользователь выбирает свой юзернейм. Мы хотим, чтобы имя пользователя содержало буквы, цифры, подчеркивания и дефисы. Мы также хотим ограничить количество символов в имени пользователя, чтобы оно не выглядело безобразно. +Для этого, используем следующее регулярное выражение: + + +

+

+ Regular expression +

+ +Регулярное выражения выше может принимать строки `john_doe`,` jo-hn_doe` и `john12_as`. +Оно не валидирует `Jo`, поскольку эта строка содержит заглавные буквы, а также она слишком короткая. + +## Содержание + +- [Совпадения](#1-совпадения) +- [Метасимволы](#2-метасимволы) + - [Точка](#21-точка) + - [Набор символов](#22-набор-символов) + - [Отрицание набора символов](#221-отрицание-набора-символов) + - [Повторения](#23-повторения) + - [Звёздочка](#231-звёздочка) + - [Плюс](#232-плюс) + - [Знак вопроса](#233-знак-вопроса) + - [Фигурные скобки](#24-фигурные-скобки) + - [Скобочные группы](#25-скобочные-группы) + - [Альтернация](#26-альтернация) + - [Экранирование](#27-экранирование) + - [Якоря](#28-якоря) + - [Каретка](#281-каретка) + - [Доллар](#282-доллар) +- [Наборы сокращений и диапазоны](#3-наборы-сокращений-и-диапазоны) +- [Опережающие и ретроспективные проверки](#4-опережающие-и-ретроспективные-проверки) + - [Положительное опережающее условие](#41-положительное-опережающее-условие) + - [Отрицательное опережающее условие](#42-отрицательное-опережающее-условие) + - [Положительное ретроспективное условие](#43-положительное-ретроспективное-условие) + - [Отрицательное ретроспективное условие](#44-отрицательное-ретроспективное-условие) +- [Флаги](#5-флаги) + - [Поиск без учета регистра](#51-поиск-без-учета-регистра) + - [Глобальный поиск](#52-глобальный-поиск) + - [Мультистроковый поиск](#53-мультистроковый-поиск) +- [Жадные vs ленивые квантификаторы](#6-жадные-vs-ленивые-квантификаторы) + +## 1. Совпадения. + +В сущности, регулярное выражение - это просто набор символов, который мы используем для поиска в тексте. +Например, регулярное выражение `the` состоит из буквы` t`, за которой следует буква `h`, за которой следует буква `e`. + +
+"the" => The fat cat sat on the mat.
+
+ +[Запустить регулярное выражение](https://regex101.com/r/dmRygT/1) + +Регулярное выражение `123` соответствует строке` 123`. Регулярное выражение сопоставляется с входной строкой, сравнивая +каждый символ в регулярном выражении с каждым символом во входной строке по одному символу за другим. Регулярные выражения +обычно чувствительны к регистру, поэтому регулярное выражение `The` не будет соответствовать строке` the`. + +
+"The" => The fat cat sat on the mat.
+
+ +[Запустить регулярное выражение](https://regex101.com/r/1paXsy/1) + +## 2. Метасимволы + +Метасимволы это блоки, из которых строятся регулярные выражения. Метасимволы не означают что-то сами по себе, +вместо этого они интерпретируются для распознавания специальных групп символов. Некоторые метасимволы имеют +особые обозначения и пишутся в квадратных скобках. Существуют следующие метасимволы: + +|Метасимволы|Описание| +|:----:|----| +|.|Точка соответствует любому отдельному символу, кроме разрыва строки.| +|[ ]|Класс символов. Находить любые символы заключенные в квадратных скобках.| +|[^ ]|Отрицание класа символов. Находить любые символы не заключенные в квадратных скобках.| +|*|Находить 0 или более повторений предыдущего символа.| +|+|Находить 1 или более повторений предыдущего символа.| +|?|Сделать предыдущий символ необязательным.| +|{n,m}|Скобки. Находить по крайней мере "n" но не более чем "m" повторений предыдущего символа.| +|(xyz)|Группа символов. Находить только символы xyz в указанном порядке.| +|||Чередование. Находить либо буквы до, либо буквы после символа.| +|\|Экранирование. Позволяет находить зарезервированные символы: [ ] ( ) { } . * + ? ^ $ \ || +|^|Обозначает начало пользовательского ввода.| +|$|Обозначает конец пользовательского ввода.| + +## 2.1 Точка + +Точка `.` это простейший пример метасимвола. Метасимвол `.` +находит любой отдельный символ. Точка не будет находить символы перехода или перевода строки. +For example, the regular expression `.ar` means: any character, followed by the +letter `a`, followed by the letter `r`. Например, регулярное выражение '.ar' обозначает: любой символ, за которым следуют буквы ` a` и `r`. + +
+".ar" => The car parked in the garage.
+
+ +[Запустить регулярное выражение](https://regex101.com/r/xc9GkU/1) + +## 2.2 Набор символов. + +Набор символов также называется классом символов. Квадратные скобки используются +для определения набора символов. Дефис используется для указания диапазона символов. +Порядок следования символов, заданный в квадратных скобках, не важен. Например, +регулярное выражение `[Tt]he` обозначает заглавную 'T' или строчную 't', за которой следуют буквы 'h' и 'e'. + +
+"[Tt]he" => The car parked in the garage.
+
+ +[Запустить регулярное выражение](https://regex101.com/r/2ITLQ4/1) + +Точка внутри набора символов, однако, обозначает непосредственно точку, как символ. +Регулярное выражение `ar[.]` обозначает строчную 'a', за которой следует 'r', за которой следует '.' (символ точки). + +
+"ar[.]" => A garage is a good place to park a car.
+
+ +[Запустить регулярное выражение](https://regex101.com/r/wL3xtE/1) + +### 2.2.1 Отрицание набора символов + +Знак вставки '^' обозначает начало строки, однако, когда вы вписываете его после открытия квадратных скобок, он отрицает набор символов. +Например, регулярное выражение `[^c]ar` обозначает любой символ, кроме 'c', за которым следуют буквы 'a' и 'r'. + +
+"[^c]ar" => The car parked in the garage.
+
+ +[Запустить регулярное выражение](https://regex101.com/r/nNNlq3/1) + +## 2.3 Повторения + +Символы `+`, `*` or `?` используются для обозначения того, как сколько раз появляется какой-либо подшаблон. +Данные метасимволы могут вести себя по-разному, в зависимости от ситуации. + +### 2.3.1 Звёздочка + +Символ `*` обозначает ноль или более повторений предыдущего совпадения. +Регулярное выражение `a *` означает ноль или более повторений предыдущего +строчного символа `a`. Если же символ появляется после набора или класса символов, +он находит повторения всего набора символов. Например, регулярное выражение `[a-z] *` +означает любое количество строчных букв в строке. + +
+"[a-z]*" => The car parked in the garage #21.
+
+ +[Запустить регулярное выражение](https://regex101.com/r/7m8me5/1) + +Символы можно комбинировать, так, например, символ `*` может использоваться с метасимволом `.` +для поиска одной строки с произвольным содержанием `. * `. Символ `*` может использоваться +с символом пробела `\ s`, чтобы находить строки с символами пробела. Например, выражение +`\ s * cat \ s *` означает: ноль или более пробелов, за которыми следует слово `cat`, +за которым следует ноль или более символов пробела. + +
+"\s*cat\s*" => The fat cat sat on the concatenation.
+
+ +[Запустить регулярное выражение](https://regex101.com/r/gGrwuz/1) + +### 2.3.2 Плюс + +Символ `+` соответствует одному или более повторению предыдущего символа. Например, +регулярное выражение `c.+t` означает строчную `c`, за которой следует по крайней мере один символ, +следом за которым идёт символ `t`. Стоит уточнить, что в данном шаблоне, `t` является последним` t` в предложении. + +
+"c.+t" => The fat cat sat on the mat.
+
+ +[Запустить регулярное выражение](https://regex101.com/r/Dzf9Aa/1) + +### 2.3.3 Знак вопроса + +В регулярном выражении метасимвол `?` делает предыдущий символ необязательным. +Этот символ соответствует нулю или одному экземпляру предыдущего символа. +Например, регулярное выражение `[T]?he` означает необязательную заглавную букву `T`, за которой следуют символы 'h' и 'e'. + +
+"[T]he" => The car is parked in the garage.
+
+ +[Запустить регулярное выражение](https://regex101.com/r/cIg9zm/1) + +
+"[T]?he" => The car is parked in the garage.
+
+ +[Запустить регулярное выражение](https://regex101.com/r/kPpO2x/1) + +## 2.4 Фигурные скобки + +В фигурных скобках, которые также называются квантификаторами, указывается, +сколько раз символ или группа символов могут повторяться. Например, регулярное выражение +`[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.
+
+ +[Запустить регулярное выражение](https://regex101.com/r/juM86s/1) + +Уберём второй номер (цифру 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.
+
+ +[Запустить регулярное выражение](https://regex101.com/r/Gdy4w5/1) + +
+"[0-9]{3}" => The number was 9.9997 but we rounded it off to 10.0.
+
+ +[Запустить регулярное выражение](https://regex101.com/r/Sivu30/1) + +## 2.5 Скобочные группы + +Скобочные группы это группы подшаблонов, которые написаны в круглых скобках +`(...)`. Как мы уже говорили ранее в регулярном выражении, если мы поставим квантификатор +после символа, он будет повторять предыдущий символ. Но если мы поставим квантификатор после +скобочной группы, он будет искать всю группу. Например, регулярное выражение `(ab) *` соответствует +нулю или более повторений символа "ab". Мы также можем использовать метасимвол чередования `|` +внутри скобочной группы. Например, регулярное выражение `(c|g|p)ar` означает поиск одной из строчных букв `c`, +`g` или `p`, за которыми следуют буквы 'a' и 'r'. + +
+"(c|g|p)ar" => The car is parked in the garage.
+
+ +[Запустить регулярное выражение](https://regex101.com/r/tUxrBG/1) + +Обратите внимание, что скобочные группы не только находят, но и захватывают символы для использования на родительском языке. +Родительским языком может быть python, javascript или практически любой язык, который реализует использование регулярных выражений как параметров функций. + +### 2.5.1 Не запоминающие скобочные группы + +Бывает так, что группу определить нужно, а вот запоминать их содержимое в массиве не требуется. +Подобный трюк осуществляется при помощи зарезервированной комбинации `?:` +в круглых скобках `(...)`. Например, регулярное выражение `(?:c|g|p)ar` будет находить такие же шаблоны как и +`(c|g|p)ar`, однако скобочная группа при этом создана не будет. + +
+"(?:c|g|p)ar" => The car is parked in the garage.
+
+ +[Запустить регулярное выражение](https://regex101.com/r/Rm7Me8/1) + +Не запоминающиеся группы пригодиться, когда они используются в функциях поиска и замены +или в сочетании со скобочными группами, например, для предпросмотра при создании скобочной группы или другого вида выходных данных, +смотрите также [4. Опережающие и ретроспективные проверки](#4-опережающие-и-ретроспективные-проверки). + +## 2.6 Альтернация + +В регулярных выражениях, вертикальная черта `|` используется для определения альтернации (чередования). +Альтернация по своей сути похожа на оператор ИЛИ между логическими выражениями. Может создаться впечатление, что +чередование это то же самое, что и определение набора символов. Однако, большая разница между ними в том, что +набор символов работает на уровне конкретных символов, в то время как альтернация работает на уровне выражений. +Например, регулярное выражение `(T|t)he|car` объединяет два шаблона (заглавная `T` ИЛИ строчная `t`, с продолжением из 'h' и 'e') и шаблон +(строчная `c`, затем строчная `a`, за которой следует строчная `r`). Таким образом, в поиске будет участвовать любой из данных шаблонов, +по аналогии с логической операцией ИЛИ в программировании и алгебре выражений. + +
+"(T|t)he|car" => The car is parked in the garage.
+
+ +[Запустить регулярное выражение](https://regex101.com/r/fBXyX0/1) + +## 2.7 Экранирование спецсимволов + +Обратный слэш `\` используется в регулярных выражениях для экранирования следующего символа. +Это позволяет формировать шаблоны с поиском зарезервированных символамов, таких как `{ } [ ] / \ + * . $ ^ | ?`. +Для использования спецсимвола в шаблоне необходимо указать символ '\' перед ним. + +Как упомянуто выше, символ `.` является зарезервированным и соответствует любому значению, кроме символа новой строки. +Бывают ситуации, когда необходимо найти точку в предложении, для таких случаев применимо экранирование. Рассмотрим выражение +`(f|c|m)at\.?`, что соответствует следующему шаблону: стройчный символ `f`, `c` или `m`, за которым следует строчные буквы `a` и `t`, с опциональной `.` точкой в конце. + +
+"(f|c|m)at\.?" => The fat cat sat on the mat.
+
+ +[Запустить регулярное выражение](https://regex101.com/r/DOc5Nu/1) + +## 2.8 Якоря + +Понятие якорей в регулярных выражениях используется для обозначения проверок, является ли +соответствующий символ начальным или конечным символом входной строки. Якоря бывают двух типов: +Первый тип - Каретка `^`, проверяет, является ли соответствующий символ начальным символом в тексте. +Второй тип - Доллар `$`, проверяет, является ли соответствующий символ последним символом входной строки. + +### 2.8.1 Каретка + +Символ каретки `^` используется для проверки, является ли соответствующий символ первым символом входной строки. +Если мы применяем следующее регулярное выражение `^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.
+
+ +[Запустить регулярное выражение](https://regex101.com/r/5ljjgB/1) + +
+"^(T|t)he" => The car is parked in the garage.
+
+ +[Запустить регулярное выражение](https://regex101.com/r/jXrKne/1) + +### 2.8.2 Доллар + +Символ доллара `$` используется для проверки, является ли соответствующий символ +последним символом входной строки. Например, регулярное выражение `(at\.)$` последовательность из +строчной `a`, строчной `t`, и точки `.`, ключевой момент в том, что благодаря доллару этот шаблон будет +находить совпадения только в том случае, если будет наблюдаться в конце строки. Например: + +
+"(at\.)" => The fat cat. sat. on the mat.
+
+ +[Запустить регулярное выражение](https://regex101.com/r/y4Au4D/1) + +
+"(at\.)$" => The fat cat. sat. on the mat.
+
+ +[Запустить регулярное выражение](https://regex101.com/r/t0AkOd/1) + +## 3. Наборы сокращений и диапазоны + +Регулярные выражения предоставляют сокращения для часто используемых наборов символов, +которые предлагают удобные сокращения для часто используемых регулярных выражений. +Наборы сокращенных символов следующие: + +|Сокращение|Описание| +|:----:|----| +|.|Любой символ кроме символа новой строки| +|\w|Поиск буквенно-цифрового диапазона символов: `[a-zA-Z0-9_]`| +|\W|Поиск не буквенно-цифрового диапазона символов: `[^\w]`| +|\d|Поиск цифр: `[0-9]`| +|\D|Поиск всего, что не является цифрой: `[^\d]`| +|\s|Поиск пробелов и символов начала строки: `[\t\n\f\r\p{Z}]`| +|\S|Поиск всего кроме пробелов и символов начала строки: `[^\s]`| + +## 4. Опережающие и ретроспективные проверки + +Опережающие и ретроспективные проверки (в английской литературе lookbehind, lookahead) это особый вид +***не запоминающих скобочных групп*** (находящих совпадения, но не добавляющих в массив). +Данные проверки используются, мы знаем, что шаблон предшествует или сопровождается другим шаблоном. +Например, мы хотим получить получить цену в долларах `$`, из следующей входной строки +`$4.44 and $10.88`. Для этого используем следующее регулярное выражение `(?<=\$)[0-9\.]*`, означающее +получение всех дробных (с точкой `.`) цифр, которым предшествует знак доллара `$`. Существуют +следующие виды проверок: + +|Символ|Описание| +|:----:|----| +|?=|Положительное опережающее условие| +|?!|Отрицательное опережающее условие| +|?<=|Положительное ретроспективное условие| +|? +"(T|t)he(?=\sfat)" => The fat cat sat on the mat. + + +[Запустить регулярное выражение](https://regex101.com/r/IDDARt/1) + +### 4.2 Отрицательное опережающее условие + +Отрицательное опережающее условие работает по обратному принципу: используется, когда нам нужно получить +все совпадения из входной строки, за которыми НЕ следует определенный шаблон. Отрицательное опережающее условие +определяется таким же образом, как и позитивное, с той лишь разницей, что вместо равенства `=` мы ставим +восклицательный знак `!` (отрицание) например: `(?!...)`. Рассмотрим выражение `(T|t)he(?!\sfat)`, в котором мы +находим все `The` или `the` слова из входной строки, за которыми не следует слово `fat`. + +
+"(T|t)he(?!\sfat)" => The fat cat sat on the mat.
+
+ +[Запустить регулярное выражение](https://regex101.com/r/V32Npg/1) + +### 4.3 Положительное ретроспективное условие + +Положительное ретроспективное условие используется чтобы найти все совпадения, которым предшествует +определенный шаблон. Условие определяется как `(?<=...)`. Например, выражение `(?<=(T|t)he\s)(fat|mat)` означает, +найти все слова `fat` или `mat` из входной строки, которым предшествует слово `The` or `the`. + +
+"(?<=(T|t)he\s)(fat|mat)" => The fat cat sat on the mat.
+
+ +[Запустить регулярное выражение](https://regex101.com/r/avH165/1) + +### 4.4 Отрицательное ретроспективное условие + +Отрицательное ретроспективное условие используется чтобы найти все совпадения, которым НЕ предшествует +определенный шаблон. Условие определяется как `(? +"(?<!(T|t)he\s)(cat)" => The cat sat on cat. + + +[Запустить регулярное выражение](https://regex101.com/r/8Efx5G/1) + +## 5. Флаги + +Флаги, также называемые модификаторами, изменяют вывод регулярного выражения. +Эти флаги могут быть использованы в любом порядке или комбинации, и являются +неотъемлемой частью регулярных выражений. + +|Флаг|Описание| +|:----:|----| +|i|Поиск без учета регистра| +|g|Глобальный поиск: поиск шаблона во всем входном тексте| +|m|Мультистроковый поиск: Якоря применяются к каждой строке.| + +### 5.1 Поиск без учета регистра + +Модификатор `i` используется для поиска без учета регистра. Например, регулярное выражение +`/The/gi` означает заглавную `T` следом строчные `h` и `e`. В конце регулярного выражения флаг `i`, +указывающий движку регулярных выражений игнорировать регистр. Помимо `i`, для поиска шаблона во +всем входном тексте, использован флаг `g`. + +
+"The" => The fat cat sat on the mat.
+
+ +[Запустить регулярное выражение](https://regex101.com/r/dpQyf9/1) + +
+"/The/gi" => The fat cat sat on the mat.
+
+ +[Запустить регулярное выражение](https://regex101.com/r/ahfiuh/1) + +### 5.2 Глобальный поиск + +Модификатор `g` используется для выполнения глобального сопоставления (найти все совпадения, а не останавливаться после первого). +Например, регулярное выражение `/.(at)/g` означает любой символ кроме символа новой строки, следом строчная `a`, далее строчная `t`. +Из-за использования флага `g` в конце регулярного выражения, теперь оно найдет все совпадения во входной строке, а не остановится на первом +(что является поведением по умолчанию). + +
+"/.(at)/" => The fat cat sat on the mat.
+
+ +[Запустить регулярное выражение](https://regex101.com/r/jnk6gM/1) + +
+"/.(at)/g" => The fat cat sat on the mat.
+
+ +[Запустить регулярное выражение](https://regex101.com/r/dO1nef/1) + +### 5.3 Мультистроковый поиск + +Модификатор `m` используется для многострочного поиска. Как мы обсуждали ранее, +якоря `(^, $)` используются для проверки, является ли шаблон началом или концом входной строки. +Но если мы хотим, чтобы якоря работали в каждой строке, мы используем флаг `m`. Например, +регулярное выражение `/at(.)?$/gm` означает строчную `a`, следом строчная `t` и любой +символ кроме начала новой строки, идущий опционально (не обязательно). Из-за флага `m` механизм +регулярных выражений будет искать данный шаблон в конце каждой строки в тексте. + +
+"/.at(.)?$/" => The fat
+                cat sat
+                on the mat.
+
+ +[Запустить регулярное выражение](https://regex101.com/r/hoGMkP/1) + +
+"/.at(.)?$/gm" => The fat
+                  cat sat
+                  on the mat.
+
+ +[Запустить регулярное выражение](https://regex101.com/r/E88WE2/1) + +## 6. Жадные vs ленивые квантификаторы +По умолчанию регулярное выражение выполняет жадное сопоставление, то есть оно будет +искать совпадения как можно дольше. Мы можем использовать `?` для ленивого поиска, который +будет стремиться быть как можно более коротким по времени. + +
+"/(.*at)/" => The fat cat sat on the mat. 
+ + +[Запустить регулярное выражение](https://regex101.com/r/AyAdgJ/1) + +
+"/(.*?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) + +## Лицензия + +MIT © [Zeeshan Ahmad](https://twitter.com/ziishaned) \ No newline at end of file

+
+
+ Learn Regex + +

+