mirror of
https://github.com/ziishaned/learn-regex.git
synced 2025-08-06 19:48:07 -04:00
Merge pull request #263 from AHOHNMYC/ru-lang-fixes
Russian language update
This commit is contained in:
commit
eaf6987888
@ -1,20 +1,11 @@
|
|||||||
<p align="center">
|
<p align="center">
|
||||||
<br/>
|
<br/>
|
||||||
<a href="https://github.com/ziishaned/learn-regex">
|
<a href="https://github.com/ziishaned/learn-regex">
|
||||||
<img src="https://i.imgur.com/bYwl7Vf.png" alt="Learn Regex">
|
<img src="https://i.imgur.com/bYwl7Vf.png" alt="Учим регулярки">
|
||||||
</a>
|
</a>
|
||||||
<br /><br />
|
|
||||||
<p>
|
|
||||||
<a href="https://twitter.com/ziishaned">
|
|
||||||
<img src="https://img.shields.io/twitter/follow/ziishaned.svg?style=social" />
|
|
||||||
</a>
|
|
||||||
<a href="https://github.com/ziishaned">
|
|
||||||
<img src="https://img.shields.io/github/followers/ziishaned.svg?label=Follow%20%40ziishaned&style=social" />
|
|
||||||
</a>
|
|
||||||
</p>
|
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
## Translations:
|
## Переводы:
|
||||||
|
|
||||||
* [English](../README.md)
|
* [English](../README.md)
|
||||||
* [German](../translations/README-de.md)
|
* [German](../translations/README-de.md)
|
||||||
@ -33,28 +24,34 @@
|
|||||||
* [فارسی](../translations/README-fa.md)
|
* [فارسی](../translations/README-fa.md)
|
||||||
* [עברית](../translations/README-he.md)
|
* [עברית](../translations/README-he.md)
|
||||||
|
|
||||||
|
|
||||||
## Что такое Регулярное выражение?
|
## Что такое Регулярное выражение?
|
||||||
|
|
||||||
[](https://gum.co/learn-regex)
|
[](https://gum.co/learn-regex)
|
||||||
|
|
||||||
> Регулярное выражение - это группа букв или символов, которая используется для поиска определенного шаблона в тексте.
|
> Регулярное выражение — это группа букв или символов, которая используется для поиска определенного шаблона в тексте.
|
||||||
|
|
||||||
Регулярное выражение - это шаблон, сопоставляемый с искомой строкой слева направо.
|
Регулярное выражение — это шаблон, сопоставляемый с искомой строкой слева
|
||||||
Термин «Регулярное выражение» сложно произносить каждый раз, поэтому, обычно, вы будете сталкиваться с сокращениями "регэкспы" или "регулярки".
|
направо. Термин "Регулярное выражение" сложно произносить каждый раз, поэтому,
|
||||||
|
обычно, вы будете сталкиваться с сокращениями "регэкспы" или "регулярки".
|
||||||
Регулярные выражения используются для замен текста внутри строк, валидации форм,
|
Регулярные выражения используются для замен текста внутри строк, валидации форм,
|
||||||
извлечений подстрок по определенным шаблонам и множества других вещей.
|
извлечений подстрок по определенным шаблонам и множества других вещей.
|
||||||
|
|
||||||
Представьте, что вы пишете приложение и хотите установить правила, по которым пользователь выбирает свой юзернейм. Мы хотим, чтобы имя пользователя содержало буквы, цифры, подчеркивания и дефисы. Мы также хотим ограничить количество символов в имени пользователя, чтобы оно не выглядело безобразно.
|
Представьте, что вы пишете приложение и хотите установить правила, по которым
|
||||||
Для этого, используем следующее регулярное выражение:
|
пользователь выбирает свой юзернейм. Мы хотим, чтобы имя пользователя содержало
|
||||||
|
буквы, цифры, подчеркивания и дефисы. Мы также хотим ограничить количество
|
||||||
|
символов в имени пользователя, чтобы оно не выглядело безобразно. Для этого
|
||||||
|
используем следующее регулярное выражение:
|
||||||
|
|
||||||
|
|
||||||
<br/><br/>
|
<br/>
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<img src="../img/regexp-ru.png" alt="Regular expression">
|
<img src="../img/regexp-ru.png" alt="Регулярное выражение">
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
Регулярное выражения выше может принимать строки `john_doe`,`jo-hn_doe` и `john12_as`.
|
Регулярное выражения выше может принимать строки `john_doe`,`jo-hn_doe` и
|
||||||
Оно не валидирует `Jo`, поскольку эта строка содержит заглавные буквы, а также она слишком короткая.
|
`john12_as`. Оно не валидирует `Jo`, поскольку эта строка содержит заглавные
|
||||||
|
буквы, а также она слишком короткая.
|
||||||
|
|
||||||
## Содержание
|
## Содержание
|
||||||
|
|
||||||
@ -69,8 +66,8 @@
|
|||||||
- [Знак вопроса](#233-знак-вопроса)
|
- [Знак вопроса](#233-знак-вопроса)
|
||||||
- [Фигурные скобки](#24-фигурные-скобки)
|
- [Фигурные скобки](#24-фигурные-скобки)
|
||||||
- [Скобочные группы](#25-скобочные-группы)
|
- [Скобочные группы](#25-скобочные-группы)
|
||||||
- [Альтернация](#26-альтернация)
|
- [Перечисление](#26-перечисление)
|
||||||
- [Экранирование](#27-экранирование)
|
- [Экранирование спецсимволов](#27-экранирование-спецсимволов)
|
||||||
- [Якоря](#28-якоря)
|
- [Якоря](#28-якоря)
|
||||||
- [Каретка](#281-каретка)
|
- [Каретка](#281-каретка)
|
||||||
- [Доллар](#282-доллар)
|
- [Доллар](#282-доллар)
|
||||||
@ -84,12 +81,13 @@
|
|||||||
- [Поиск без учета регистра](#51-поиск-без-учета-регистра)
|
- [Поиск без учета регистра](#51-поиск-без-учета-регистра)
|
||||||
- [Глобальный поиск](#52-глобальный-поиск)
|
- [Глобальный поиск](#52-глобальный-поиск)
|
||||||
- [Мультистроковый поиск](#53-мультистроковый-поиск)
|
- [Мультистроковый поиск](#53-мультистроковый-поиск)
|
||||||
- [Жадные vs ленивые квантификаторы](#6-жадные-vs-ленивые-квантификаторы)
|
- [Жадная и ленивая квантификация](#6-жадная-и-ленивая-квантификация)
|
||||||
|
|
||||||
## 1. Совпадения.
|
## 1. Совпадения.
|
||||||
|
|
||||||
В сущности, регулярное выражение - это просто набор символов, который мы используем для поиска в тексте.
|
В сущности, регулярное выражение — это просто набор символов, который мы
|
||||||
Например, регулярное выражение `the` состоит из буквы `t`, за которой следует буква `h`, за которой следует буква `e`.
|
используем для поиска в тексте. Например, регулярное выражение `the` состоит из
|
||||||
|
буквы `t`, за которой следует буква `h`, за которой следует буква `e`.
|
||||||
|
|
||||||
<pre>
|
<pre>
|
||||||
"the" => The fat cat sat on <a href="#learn-regex"><strong>the</strong></a> mat.
|
"the" => The fat cat sat on <a href="#learn-regex"><strong>the</strong></a> mat.
|
||||||
@ -97,9 +95,11 @@
|
|||||||
|
|
||||||
[Запустить регулярное выражение](https://regex101.com/r/dmRygT/1)
|
[Запустить регулярное выражение](https://regex101.com/r/dmRygT/1)
|
||||||
|
|
||||||
Регулярное выражение `123` соответствует строке `123`. Регулярное выражение сопоставляется с входной строкой, сравнивая
|
Регулярное выражение `123` соответствует строке `123`. Регулярное выражение
|
||||||
каждый символ в регулярном выражении с каждым символом во входной строке по одному символу за другим. Регулярные выражения
|
сопоставляется с входной строкой посимвольно. Каждый символ в регулярном
|
||||||
обычно чувствительны к регистру, поэтому регулярное выражение `The` не будет соответствовать строке `the`.
|
выражении сравнивается с каждым символом во входной строке, один символ за
|
||||||
|
другим. Регулярные выражения обычно чувствительны к регистру, поэтому регулярное
|
||||||
|
выражение `The` не будет соответствовать строке `the`.
|
||||||
|
|
||||||
<pre>
|
<pre>
|
||||||
"The" => <a href="#learn-regex"><strong>The</strong></a> fat cat sat on the mat.
|
"The" => <a href="#learn-regex"><strong>The</strong></a> fat cat sat on the mat.
|
||||||
@ -109,30 +109,32 @@
|
|||||||
|
|
||||||
## 2. Метасимволы
|
## 2. Метасимволы
|
||||||
|
|
||||||
Метасимволы это блоки, из которых строятся регулярные выражения. Метасимволы не означают что-то сами по себе,
|
Метасимволы — это строительные блоки для регулярных выражений. Метасимволы не
|
||||||
вместо этого они интерпретируются для распознавания специальных групп символов. Некоторые метасимволы имеют
|
ищутся в строке как есть, они интерпретируются особым образом. Некоторые
|
||||||
особые обозначения и пишутся в квадратных скобках. Существуют следующие метасимволы:
|
метасимволы имеют особое значение и пишутся в квадратных скобках. Существуют
|
||||||
|
следующие метасимволы:
|
||||||
|
|
||||||
|Метасимволы|Описание|
|
|Метасимвол|Описание|
|
||||||
|:----:|----|
|
|:----:|----|
|
||||||
|.|Точка соответствует любому отдельному символу, кроме разрыва строки.|
|
|.|Точка соответствует любому отдельному символу, кроме перевода строки.|
|
||||||
|[ ]|Класс символов. Находить любые символы заключенные в квадратных скобках.|
|
|[ ]|Класс символов. Заменяет любой из символов, заключенных в квадратных скобках.|
|
||||||
|[^ ]|Отрицание класа символов. Находить любые символы не заключенные в квадратных скобках.|
|
|[^ ]|Отрицание класа символов. Соответствует любом символу, не содержащемуся в квадратных скобках.|
|
||||||
|*|Находить 0 или более повторений предыдущего символа.|
|
|\*|Искать 0 или более повторов предыдущего символа.|
|
||||||
|+|Находить 1 или более повторений предыдущего символа.|
|
|+|Искать 1 или более повторов предыдущего символа.|
|
||||||
|?|Сделать предыдущий символ необязательным.|
|
|?|Делает предыдущий символ необязательным.|
|
||||||
|{n,m}|Скобки. Находить по крайней мере "n" но не более чем "m" повторений предыдущего символа.|
|
|{n,m}|Скобки. Искать не менее "n" и не более "m" повторов предыдущего символа.|
|
||||||
|(xyz)|Группа символов. Находить только символы xyz в указанном порядке.|
|
|(xyz)|Группа символов. Искать только символы xyz в указанном порядке.|
|
||||||
|||Чередование. Находить либо буквы до, либо буквы после символа.|
|
|||Чередование. Искать либо знаки до этого символа, либо знаки после символа.|
|
||||||
|\|Экранирование. Позволяет находить зарезервированные символы: <code>[ ] ( ) { } . * + ? ^ $ \ |</code>|
|
|\|Экранирование следующего символа. Позволяет искать специальные знаки: <code>[ ] ( ) { } . * + ? ^ $ \ |</code>|
|
||||||
|^|Обозначает начало пользовательского ввода.|
|
|^|Обозначает начало пользовательского ввода.|
|
||||||
|$|Обозначает конец пользовательского ввода.|
|
|$|Обозначает конец пользовательского ввода.|
|
||||||
|
|
||||||
## 2.1 Точка
|
## 2.1 Точка
|
||||||
|
|
||||||
Точка `.` это простейший пример метасимвола. Метасимвол `.`
|
Точка `.` — это простейший пример метасимвола. Метасимвол `.`
|
||||||
находит любой отдельный символ. Точка не будет находить символы перехода или перевода строки.
|
находит любой отдельный символ. Точка не будет находить символы возврата каретки
|
||||||
Например, регулярное выражение `.ar` обозначает: любой символ, за которым следуют буквы `a` и `r`.
|
(CR) или перевода строки (LF). Например, регулярное выражение `.ar` обозначает
|
||||||
|
"любой символ, за которым следуют буквы `a` и `r`".
|
||||||
|
|
||||||
<pre>
|
<pre>
|
||||||
".ar" => The <a href="#learn-regex"><strong>car</strong></a> <a href="#learn-regex"><strong>par</strong></a>ked in the <a href="#learn-regex"><strong>gar</strong></a>age.
|
".ar" => The <a href="#learn-regex"><strong>car</strong></a> <a href="#learn-regex"><strong>par</strong></a>ked in the <a href="#learn-regex"><strong>gar</strong></a>age.
|
||||||
@ -142,10 +144,11 @@
|
|||||||
|
|
||||||
## 2.2 Набор символов.
|
## 2.2 Набор символов.
|
||||||
|
|
||||||
Набор символов также называется классом символов. Квадратные скобки используются
|
Набор символов, также называется классом символов. Для определения набора
|
||||||
для определения набора символов. Дефис используется для указания диапазона символов.
|
символов используются квадратные скобки. Дефис используется для указания
|
||||||
Порядок следования символов, заданный в квадратных скобках, не важен. Например,
|
диапазона символов. Порядок следования символов, заданный в квадратных скобках,
|
||||||
регулярное выражение `[Tt]he` обозначает заглавную `T` или строчную `t`, за которой следуют буквы `h` и `e`.
|
не важен. Например, регулярное выражение `[Tt]he` интерпретируется как
|
||||||
|
"заглавная `T` или строчная `t`, за которой следуют буквы `h` и `e`".
|
||||||
|
|
||||||
<pre>
|
<pre>
|
||||||
"[Tt]he" => <a href="#learn-regex"><strong>The</strong></a> car parked in <a href="#learn-regex"><strong>the</strong></a> garage.
|
"[Tt]he" => <a href="#learn-regex"><strong>The</strong></a> car parked in <a href="#learn-regex"><strong>the</strong></a> garage.
|
||||||
@ -153,8 +156,9 @@
|
|||||||
|
|
||||||
[Запустить регулярное выражение](https://regex101.com/r/2ITLQ4/1)
|
[Запустить регулярное выражение](https://regex101.com/r/2ITLQ4/1)
|
||||||
|
|
||||||
Точка внутри набора символов, однако, обозначает непосредственно точку, как символ.
|
Точка внутри набора символов, внезапно, обозначает непосредственно точку как
|
||||||
Регулярное выражение `ar[.]` обозначает строчную `a`, за которой следует `r`, за которой следует `.` (символ точки).
|
символ. Регулярное выражение `ar[.]` обозначает строчную `a`, за которой следует
|
||||||
|
`r`, за которой следует `.` (символ точки).
|
||||||
|
|
||||||
<pre>
|
<pre>
|
||||||
"ar[.]" => A garage is a good place to park a c<a href="#learn-regex"><strong>ar.</strong></a>
|
"ar[.]" => A garage is a good place to park a c<a href="#learn-regex"><strong>ar.</strong></a>
|
||||||
@ -164,8 +168,9 @@
|
|||||||
|
|
||||||
### 2.2.1 Отрицание набора символов
|
### 2.2.1 Отрицание набора символов
|
||||||
|
|
||||||
Знак вставки `^` обозначает начало строки, однако, когда вы вписываете его после открытия квадратных скобок, он отрицает набор символов.
|
Карет `^` обозначает начало строки, но если вы поставите его после открывающей
|
||||||
Например, регулярное выражение `[^c]ar` обозначает любой символ, кроме `c`, за которым следуют буквы `a` и `r`.
|
квадратной скобки, он инвертирует набор символов. Например, регулярное выражение
|
||||||
|
`[^c]ar` обозначает "любой символ, кроме `c`, за которым следуют буквы `a` и `r`".
|
||||||
|
|
||||||
<pre>
|
<pre>
|
||||||
"[^c]ar" => The car <a href="#learn-regex"><strong>par</strong></a>ked in the <a href="#learn-regex"><strong>gar</strong></a>age.
|
"[^c]ar" => The car <a href="#learn-regex"><strong>par</strong></a>ked in the <a href="#learn-regex"><strong>gar</strong></a>age.
|
||||||
@ -175,16 +180,16 @@
|
|||||||
|
|
||||||
## 2.3 Повторения
|
## 2.3 Повторения
|
||||||
|
|
||||||
Символы `+`, `*` или `?` используются для обозначения того сколько раз появляется какой-либо подшаблон.
|
Символы `+`, `*` и `?` используются для обозначения того, сколько раз появляется
|
||||||
Данные метасимволы могут вести себя по-разному, в зависимости от ситуации.
|
символ перед ними. Эти метасимволы ведут себя в разных ситуациях по-разному.
|
||||||
|
|
||||||
### 2.3.1 Звёздочка
|
### 2.3.1 Звёздочка
|
||||||
|
|
||||||
Символ `*` обозначает ноль или более повторений предыдущего совпадения.
|
Символ `*` обозначает ноль или более повторений предыдущего символа. Регулярное
|
||||||
Регулярное выражение `a*` означает ноль или более повторений предыдущего
|
выражение `a*` толкуется как "ноль или более повторений предыдущего строчного
|
||||||
строчного символа `a`. Если же символ появляется после набора или класса символов,
|
символа `a`". Если же символ появляется после набора или класса символов, он
|
||||||
он находит повторения всего набора символов. Например, регулярное выражение `[a-z]*`
|
ищет повторения всего набора символов. Например, регулярное выражение `[a-z]*`
|
||||||
означает любое количество строчных букв в строке.
|
означает "любое количество строчных букв".
|
||||||
|
|
||||||
<pre>
|
<pre>
|
||||||
"[a-z]*" => T<a href="#learn-regex"><strong>he</strong></a> <a href="#learn-regex"><strong>car</strong></a> <a href="#learn-regex"><strong>parked</strong></a> <a href="#learn-regex"><strong>in</strong></a> <a href="#learn-regex"><strong>the</strong></a> <a href="#learn-regex"><strong>garage</strong></a> #21.
|
"[a-z]*" => T<a href="#learn-regex"><strong>he</strong></a> <a href="#learn-regex"><strong>car</strong></a> <a href="#learn-regex"><strong>parked</strong></a> <a href="#learn-regex"><strong>in</strong></a> <a href="#learn-regex"><strong>the</strong></a> <a href="#learn-regex"><strong>garage</strong></a> #21.
|
||||||
@ -192,11 +197,12 @@
|
|||||||
|
|
||||||
[Запустить регулярное выражение](https://regex101.com/r/7m8me5/1)
|
[Запустить регулярное выражение](https://regex101.com/r/7m8me5/1)
|
||||||
|
|
||||||
Символы можно комбинировать, так, например, символ `*` может использоваться с метасимволом `.`
|
Символы можно комбинировать. Например, метасимвол `*` может использоваться с
|
||||||
для поиска одной строки с произвольным содержанием `.*`. Символ `*` может использоваться
|
метасимволом `.` для поиска строки с произвольным содержанием: `.*`. Символ `*`
|
||||||
с символом пробела `\s`, чтобы находить строки с символами пробела. Например, выражение
|
может использоваться с символом пробела `\s`, чтобы искать строки с символами
|
||||||
`\s*cat\s*` означает: ноль или более пробелов, за которыми следует слово `cat`,
|
пробела. Например, выражение `\s*cat\s*` означает: "ноль или более пробелов, за
|
||||||
за которым следует ноль или более символов пробела.
|
которыми следует слово `cat`, за которым следует ноль или более символов
|
||||||
|
пробела".
|
||||||
|
|
||||||
<pre>
|
<pre>
|
||||||
"\s*cat\s*" => The fat<a href="#learn-regex"><strong> cat </strong></a>sat on the con<a href="#learn-regex"><strong>cat</strong></a>enation.
|
"\s*cat\s*" => The fat<a href="#learn-regex"><strong> cat </strong></a>sat on the con<a href="#learn-regex"><strong>cat</strong></a>enation.
|
||||||
@ -206,9 +212,11 @@
|
|||||||
|
|
||||||
### 2.3.2 Плюс
|
### 2.3.2 Плюс
|
||||||
|
|
||||||
Символ `+` соответствует одному или более повторению предыдущего символа. Например,
|
Символ `+` соответствует одному или более повторению предыдущего символа.
|
||||||
регулярное выражение `c.+t` означает строчную `c`, за которой следует по крайней мере один символ,
|
Например, регулярное выражение `c.+t` интерпретируется так: "строчная `c`, за
|
||||||
следом за которым идёт символ `t`. Стоит уточнить, что в данном шаблоне, `t` является последним `t` в предложении.
|
которой следует по крайней мере один любой символ, следом за которым(и) идёт
|
||||||
|
символ `t`. Стоит уточнить, что в данном шаблоне, `t` является последним `t` в
|
||||||
|
строке.
|
||||||
|
|
||||||
<pre>
|
<pre>
|
||||||
"c.+t" => The fat <a href="#learn-regex"><strong>cat sat on the mat</strong></a>.
|
"c.+t" => The fat <a href="#learn-regex"><strong>cat sat on the mat</strong></a>.
|
||||||
@ -219,8 +227,9 @@
|
|||||||
### 2.3.3 Знак вопроса
|
### 2.3.3 Знак вопроса
|
||||||
|
|
||||||
В регулярном выражении метасимвол `?` делает предыдущий символ необязательным.
|
В регулярном выражении метасимвол `?` делает предыдущий символ необязательным.
|
||||||
Этот символ соответствует нулю или одному экземпляру предыдущего символа.
|
Этот символ соответствует нулю или одному вхождению предыдущего символа.
|
||||||
Например, регулярное выражение `[T]?he` означает необязательную заглавную букву `T`, за которой следуют символы `h` и `e`.
|
Например, регулярное выражение `[T]?he` означает: "необязательная заглавная
|
||||||
|
буква `T`, за которой следуют символы `h` и `e`".
|
||||||
|
|
||||||
<pre>
|
<pre>
|
||||||
"[T]he" => <a href="#learn-regex"><strong>The</strong></a> car is parked in the garage.
|
"[T]he" => <a href="#learn-regex"><strong>The</strong></a> car is parked in the garage.
|
||||||
@ -237,8 +246,8 @@
|
|||||||
## 2.4 Фигурные скобки
|
## 2.4 Фигурные скобки
|
||||||
|
|
||||||
В фигурных скобках, которые также называются квантификаторами, указывается,
|
В фигурных скобках, которые также называются квантификаторами, указывается,
|
||||||
сколько раз символ или группа символов могут повторяться. Например, регулярное выражение
|
сколько раз символ или группа символов могут повторяться. Например, регулярное
|
||||||
`[0-9]{2,3}` означает совпадение не менее 2 но не более 3 цифр в диапазоне от 0 до 9.
|
выражение `[0-9]{2,3}` означает: "от 2 до 3 цифр в диапазоне от 0 до 9.
|
||||||
|
|
||||||
<pre>
|
<pre>
|
||||||
"[0-9]{2,3}" => The number was 9.<a href="#learn-regex"><strong>999</strong></a>7 but we rounded it off to <a href="#learn-regex"><strong>10</strong></a>.0.
|
"[0-9]{2,3}" => The number was 9.<a href="#learn-regex"><strong>999</strong></a>7 but we rounded it off to <a href="#learn-regex"><strong>10</strong></a>.0.
|
||||||
@ -246,9 +255,9 @@
|
|||||||
|
|
||||||
[Запустить регулярное выражение](https://regex101.com/r/juM86s/1)
|
[Запустить регулярное выражение](https://regex101.com/r/juM86s/1)
|
||||||
|
|
||||||
Уберём второй номер (цифру 3), тогда, регулярное выражение `[0-9]{2,}` будет означать
|
Мы можем опустить второе число (цифру 3), тогда регулярное выражение `[0-9]{2,}`
|
||||||
совпадение 2 или более цифр. Если мы также удалим запятую, то регулярное выражение
|
будет значить "2 или более цифр". А если мы удалим запятую, регулярное выражение
|
||||||
`[0-9]{3}` будет означать совпадение точно с 3 цифрами.
|
`[0-9]{3}` будет искать ровно 3 цифры.
|
||||||
|
|
||||||
<pre>
|
<pre>
|
||||||
"[0-9]{2,}" => The number was 9.<a href="#learn-regex"><strong>9997</strong></a> but we rounded it off to <a href="#learn-regex"><strong>10</strong></a>.0.
|
"[0-9]{2,}" => The number was 9.<a href="#learn-regex"><strong>9997</strong></a> but we rounded it off to <a href="#learn-regex"><strong>10</strong></a>.0.
|
||||||
@ -264,13 +273,14 @@
|
|||||||
|
|
||||||
## 2.5 Скобочные группы
|
## 2.5 Скобочные группы
|
||||||
|
|
||||||
Скобочные группы это группы подшаблонов, которые написаны в круглых скобках
|
Скобочные группы — это группы подшаблонов, которые написаны в круглых скобках
|
||||||
`(...)`. Как мы уже говорили ранее в регулярном выражении, если мы поставим квантификатор
|
`(...)`. Как мы уже говорили ранее, в регулярном выражении, квантификатор после
|
||||||
после символа, он будет повторять предыдущий символ. Но если мы поставим квантификатор после
|
символа, ищет повторы символа перед квантификатором. Если мы поставим
|
||||||
скобочной группы, он будет искать всю группу. Например, регулярное выражение `(ab)*` соответствует
|
квантификатор после скобочной группы, он будет искать повторы всей группы. К
|
||||||
нулю или более повторений символа "ab". Мы также можем использовать метасимвол чередования `|`
|
примеру, регулярное выражение `(ab)*` соответствует нулю или более повторений
|
||||||
внутри скобочной группы. Например, регулярное выражение `(c|g|p)ar` означает поиск одной из строчных букв `c`,
|
строки "ab". Мы также можем использовать метасимвол чередования `|` внутри
|
||||||
`g` или `p`, за которыми следуют буквы `a` и `r`.
|
скобочной группы. Так, регулярное выражение `(c|g|p)ar` означает: "любая из
|
||||||
|
строчных букв `c`, `g` или `p`, за которой следуют буквы `a` и `r`".
|
||||||
|
|
||||||
<pre>
|
<pre>
|
||||||
"(c|g|p)ar" => The <a href="#learn-regex"><strong>car</strong></a> is <a href="#learn-regex"><strong>par</strong></a>ked in the <a href="#learn-regex"><strong>gar</strong></a>age.
|
"(c|g|p)ar" => The <a href="#learn-regex"><strong>car</strong></a> is <a href="#learn-regex"><strong>par</strong></a>ked in the <a href="#learn-regex"><strong>gar</strong></a>age.
|
||||||
@ -278,15 +288,18 @@
|
|||||||
|
|
||||||
[Запустить регулярное выражение](https://regex101.com/r/tUxrBG/1)
|
[Запустить регулярное выражение](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`, но группа захвата
|
||||||
|
при этом создана не будет.
|
||||||
|
|
||||||
<pre>
|
<pre>
|
||||||
"(?:c|g|p)ar" => The <a href="#learn-regex"><strong>car</strong></a> is <a href="#learn-regex"><strong>par</strong></a>ked in the <a href="#learn-regex"><strong>gar</strong></a>age.
|
"(?:c|g|p)ar" => The <a href="#learn-regex"><strong>car</strong></a> is <a href="#learn-regex"><strong>par</strong></a>ked in the <a href="#learn-regex"><strong>gar</strong></a>age.
|
||||||
@ -294,19 +307,20 @@
|
|||||||
|
|
||||||
[Запустить регулярное выражение](https://regex101.com/r/Rm7Me8/1)
|
[Запустить регулярное выражение](https://regex101.com/r/Rm7Me8/1)
|
||||||
|
|
||||||
Незапоминающиеся группы могут пригодиться, когда они используются в функциях поиска и замены,
|
Незахватывающие группы могут пригодиться, в ситуациях типа найти-и-заменить, или
|
||||||
или в сочетании со скобочными группами, например, для предпросмотра при создании скобочной группы или другого вида выходных данных,
|
вместе со скобочными группами, чтобы не засорять массив из захваченных данных
|
||||||
смотрите также [4. Опережающие и ретроспективные проверки](#4-опережающие-и-ретроспективные-проверки).
|
ненужными строками. Смотрите также [4. Опережающие и ретроспективные проверки](#4-опережающие-и-ретроспективные-проверки).
|
||||||
|
|
||||||
## 2.6 Альтернация
|
## 2.6 Перечисление
|
||||||
|
|
||||||
В регулярных выражениях, вертикальная черта `|` используется для определения альтернации (чередования).
|
В регулярных выражениях вертикальная черта `|` используется для определения
|
||||||
Альтернация по своей сути похожа на оператор ИЛИ между логическими выражениями. Может создаться впечатление, что
|
перечисления (выбора). Перечисление похоже на оператор ИЛИ между выражениями.
|
||||||
чередование это то же самое, что и определение набора символов. Однако, большая разница между ними в том, что
|
Может создаться впечатление, что перечисление — это то же, что и набор символов.
|
||||||
набор символов работает на уровне конкретных символов, в то время как альтернация работает на уровне выражений.
|
Но набор символов работает на уровне конкретных символов, а перечисление
|
||||||
Например, регулярное выражение `(T|t)he|car` объединяет два шаблона (заглавная `T` ИЛИ строчная `t`, с продолжением из `h` и `e`) и шаблон
|
работает на уровне выражений. К примеру, регулярное выражение `(T|t)he|car`
|
||||||
(строчная `c`, затем строчная `a`, за которой следует строчная `r`). Таким образом, в поиске будет участвовать любой из данных шаблонов,
|
значит: либо "заглавная `T` ИЛИ строчная `t`, с продолжением из `h` и `e`", либо
|
||||||
по аналогии с логической операцией ИЛИ в программировании и алгебре выражений.
|
"строчная `c`, затем строчная `a`, за которой следует строчная `r`". Во входных
|
||||||
|
данных будут искаться оба шаблона, для удобства заключённые в кавычки.
|
||||||
|
|
||||||
<pre>
|
<pre>
|
||||||
"(T|t)he|car" => <a href="#learn-regex"><strong>The</strong></a> <a href="#learn-regex"><strong>car</strong></a> is parked in <a href="#learn-regex"><strong>the</strong></a> garage.
|
"(T|t)he|car" => <a href="#learn-regex"><strong>The</strong></a> <a href="#learn-regex"><strong>car</strong></a> is parked in <a href="#learn-regex"><strong>the</strong></a> garage.
|
||||||
@ -316,13 +330,15 @@
|
|||||||
|
|
||||||
## 2.7 Экранирование спецсимволов
|
## 2.7 Экранирование спецсимволов
|
||||||
|
|
||||||
Обратный слэш `\` используется в регулярных выражениях для экранирования следующего символа.
|
Обратный слэш `\` используется в регулярных выражениях для экранирования
|
||||||
Это позволяет формировать шаблоны с поиском зарезервированных символов, таких как `{ } [ ] / \ + * . $ ^ | ?`.
|
следующего символа. Это позволяет формировать шаблоны с поиском специальных
|
||||||
Для использования спецсимвола в шаблоне необходимо указать символ `\` перед ним.
|
символов, таких как `{ } [ ] / \ + * . $ ^ | ?`. Для использования спецсимвола в
|
||||||
|
шаблоне необходимо указать символ `\` перед ним.
|
||||||
|
|
||||||
Как упомянуто выше, символ `.` является зарезервированным и соответствует любому значению, кроме символа новой строки.
|
Например: символ `.` является специальным и соответствует любому знаку, кроме
|
||||||
Бывают ситуации, когда необходимо найти точку в предложении, для таких случаев применимо экранирование. Рассмотрим выражение
|
символа новой строки. Чтобы найти точку во входных данных, воспользуется
|
||||||
`(f|c|m)at\.?`, что соответствует следующему шаблону: строчный символ `f`, `c` или `m`, за которым следует строчные буквы `a` и `t`, с опциональной `.` точкой в конце.
|
выражением `(f|c|m)at\.?`: "строчный символ `f`, `c` или `m`, за которым следует
|
||||||
|
строчные буквы `a` и `t`, с необязательной `.` точкой в конце".
|
||||||
|
|
||||||
<pre>
|
<pre>
|
||||||
"(f|c|m)at\.?" => The <a href="#learn-regex"><strong>fat</strong></a> <a href="#learn-regex"><strong>cat</strong></a> sat on the <a href="#learn-regex"><strong>mat.</strong></a>
|
"(f|c|m)at\.?" => The <a href="#learn-regex"><strong>fat</strong></a> <a href="#learn-regex"><strong>cat</strong></a> sat on the <a href="#learn-regex"><strong>mat.</strong></a>
|
||||||
@ -332,19 +348,22 @@
|
|||||||
|
|
||||||
## 2.8 Якоря
|
## 2.8 Якоря
|
||||||
|
|
||||||
Понятие якорей в регулярных выражениях используется для обозначения проверок, является ли
|
Якоря в регулярных выражениях используются для проверки, является ли
|
||||||
соответствующий символ начальным или конечным символом входной строки. Якоря бывают двух типов:
|
соответствующий символ первым или последним символом входной строки. Есть два
|
||||||
Первый тип - Каретка `^`, проверяет, является ли соответствующий символ начальным символом в тексте.
|
типа якорей: каретка `^` — проверяет, является ли соответствующий символ первым
|
||||||
Второй тип - Доллар `$`, проверяет, является ли соответствующий символ последним символом входной строки.
|
символом в тексте, и доллар `$` — проверяет, является ли соответствующий символ
|
||||||
|
последним символом входной строки.
|
||||||
|
|
||||||
### 2.8.1 Каретка
|
### 2.8.1 Каретка
|
||||||
|
|
||||||
Символ каретки `^` используется для проверки, является ли соответствующий символ первым символом входной строки.
|
Символ каретки `^` используется для проверки, является ли соответствующий символ
|
||||||
Если мы применяем следующее регулярное выражение `^a` (если a является начальным символом) для строки `abc`,
|
первым символом входной строки. Если мы применяем следующее регулярное выражение
|
||||||
совпадение будет соответствовать букве `a`. Если же мы используем регулярное выражение `^b` на той же строке,
|
`^a` ('a' является первым символом) для строки `abc`, совпадение будет
|
||||||
мы не получим совпадения, поскольку во входящей строке `abc` "b" не является первым символом. Рассмотрим другое
|
соответствовать букве `a`. Если же мы используем регулярное выражение `^b` на
|
||||||
регулярное выражение: `^(T|t)he`, обозначающее заглавную `T` или строчную `t` как первый символ, за которым следуют
|
той же строке, мы не получим совпадения, поскольку во входящей строке `abc` "b"
|
||||||
символы букв `h` и `e`. Cоответственно:
|
не является первым символом. Рассмотрим другое регулярное выражение: `^(T|t)he`,
|
||||||
|
оно значит "заглавная `T` или строчная `t` как первый символ, за которым следуют
|
||||||
|
буквы `h` и `e`". Cоответственно:
|
||||||
|
|
||||||
<pre>
|
<pre>
|
||||||
"(T|t)he" => <a href="#learn-regex"><strong>The</strong></a> car is parked in <a href="#learn-regex"><strong>the</strong></a> garage.
|
"(T|t)he" => <a href="#learn-regex"><strong>The</strong></a> car is parked in <a href="#learn-regex"><strong>the</strong></a> garage.
|
||||||
@ -361,9 +380,9 @@
|
|||||||
### 2.8.2 Доллар
|
### 2.8.2 Доллар
|
||||||
|
|
||||||
Символ доллара `$` используется для проверки, является ли соответствующий символ
|
Символ доллара `$` используется для проверки, является ли соответствующий символ
|
||||||
последним символом входной строки. Например, регулярное выражение `(at\.)$` последовательность из
|
последним символом входной строки. Например, регулярное выражение `(at\.)$`
|
||||||
строчной `a`, строчной `t`, и точки `.`, ключевой момент в том, что благодаря доллару этот шаблон будет
|
значит: "последовательность из строчной `a`, строчной `t`, точки `.`, находящая
|
||||||
находить совпадения только в том случае, если будет наблюдаться в конце строки. Например:
|
в конце строки". Пример:
|
||||||
|
|
||||||
<pre>
|
<pre>
|
||||||
"(at\.)" => The fat c<a href="#learn-regex"><strong>at.</strong></a> s<a href="#learn-regex"><strong>at.</strong></a> on the m<a href="#learn-regex"><strong>at.</strong></a>
|
"(at\.)" => The fat c<a href="#learn-regex"><strong>at.</strong></a> s<a href="#learn-regex"><strong>at.</strong></a> on the m<a href="#learn-regex"><strong>at.</strong></a>
|
||||||
@ -379,29 +398,28 @@
|
|||||||
|
|
||||||
## 3. Наборы сокращений и диапазоны
|
## 3. Наборы сокращений и диапазоны
|
||||||
|
|
||||||
Регулярные выражения предоставляют сокращения для часто используемых наборов символов,
|
В регулярных выражениях есть сокращения для часто используемых наборов символов:
|
||||||
которые предлагают удобные сокращения для часто используемых регулярных выражений.
|
|
||||||
Наборы сокращенных символов следующие:
|
|
||||||
|
|
||||||
|Сокращение|Описание|
|
|Сокращение|Описание|
|
||||||
|:----:|----|
|
|:----:|----|
|
||||||
|.|Любой символ кроме символа новой строки|
|
|.|Любой символ, кроме символа перевода строки|
|
||||||
|\w|Поиск буквенно-цифрового диапазона символов: `[a-zA-Z0-9_]`|
|
|\w|Английская буква либо цифра: `[a-zA-Z0-9_]`|
|
||||||
|\W|Поиск не буквенно-цифрового диапазона символов: `[^\w]`|
|
|\W|Любой символ, кроме английских букв и цифр: `[^\w]`|
|
||||||
|\d|Поиск цифр: `[0-9]`|
|
|\d|Цифра: `[0-9]`|
|
||||||
|\D|Поиск всего, что не является цифрой: `[^\d]`|
|
|\D|Поиск всего, что не является цифрой: `[^\d]`|
|
||||||
|\s|Поиск пробелов и символов начала строки: `[\t\n\f\r\p{Z}]`|
|
|\s|Пробел либо символ начала строки: `[\t\n\f\r\p{Z}]`|
|
||||||
|\S|Поиск всего кроме пробелов и символов начала строки: `[^\s]`|
|
|\S|Любой символ, кроме пробела и символа начала строки: `[^\s]`|
|
||||||
|
|
||||||
## 4. Опережающие и ретроспективные проверки
|
## 4. Опережающие и ретроспективные проверки
|
||||||
|
|
||||||
Опережающие и ретроспективные проверки (в английской литературе lookbehind, lookahead) это особый вид
|
Опережающие и ретроспективные проверки (lookbehind, lookahead) — это особый вид
|
||||||
***не запоминающих скобочных групп*** (находящих совпадения, но не добавляющих в массив).
|
***незахватывающих скобочных групп*** (находящих совпадения, но не добавляющих
|
||||||
Данные проверки используются когда мы знаем, что шаблон предшествует или сопровождается другим шаблоном.
|
в массив совпадений). Данные проверки используются, когда мы знаем, что шаблон
|
||||||
Например, мы хотим получить цену в долларах `$` из следующей входной строки
|
предшествует или сопровождается другим шаблоном. Например, мы хотим получить
|
||||||
`$4.44 and $10.88`. Для этого используем следующее регулярное выражение `(?<=\$)[0-9\.]*`, означающее
|
цену в долларах `$` из следующей входной строки `$4.44 and $10.88`. Для этого
|
||||||
получение всех дробных (с точкой `.`) цифр, которым предшествует знак доллара `$`. Существуют
|
используем следующее регулярное выражение `(?<=\$)[0-9\.]*`, означающее
|
||||||
следующие виды проверок:
|
получение всех дробных (с точкой `.`) цифр, которым предшествует знак доллара
|
||||||
|
`$`. Существуют следующие виды проверок:
|
||||||
|
|
||||||
|Символ|Описание|
|
|Символ|Описание|
|
||||||
|:----:|----|
|
|:----:|----|
|
||||||
@ -412,14 +430,17 @@
|
|||||||
|
|
||||||
### 4.1 Положительное опережающее условие
|
### 4.1 Положительное опережающее условие
|
||||||
|
|
||||||
Положительное опережающее утверждение (assert) означает, что за первой частью выражения должно следовать
|
Положительное опережающее условие требует, чтобы за первой частью выражения
|
||||||
опережающее выражение (lookahead expression). (по аналогии с условиями, if (..) then (..)).
|
обязательно следовало выражение из условия. Возвращенное совпадение содержит
|
||||||
Возвращенное совпадение содержит только текст, который соответствует первой части выражения.
|
только текст, который соответствует первой части выражения. Для определения
|
||||||
Для определения положительного опережающего условия используются круглые скобки. В этих скобках используется
|
положительного опережающего условия используются круглые скобки. В этих скобках
|
||||||
знак вопроса со знаком равенства: `(?=...)`. Опережающее выражение, записывается в скобках после знака равенства.
|
используется знак вопроса со знаком равенства: `(?=...)`. Опережающее выражение
|
||||||
Рассмотрим пример регулярного выражения: `(T|t)he(?=\sfat)`, обозначающее опциональное наличие строчной `t` или заглавной `T`,
|
записывается внутри скобок после знака равенства. Рассмотрим пример регулярного
|
||||||
следом буквы `h` и `e`. В скобках, мы определяем положительное опережающее условие, которое сообщает движку регулярных выражений
|
выражения: `(T|t)he(?=\sfat)` "заглавная `T` или строчная `t`, следом буквы `h`
|
||||||
информацию о том, что после шаблона `The` или `the` будет следовать слово `fat`.
|
и `e`. Всё это должно быть перед пробелом и словом 'fat'". В скобках мы
|
||||||
|
определяем положительное опережающее условие, которое говорит библиотеке
|
||||||
|
регулярных выражений о том, что после шаблона `The` или `the` будет следовать
|
||||||
|
слово `fat`.
|
||||||
|
|
||||||
<pre>
|
<pre>
|
||||||
"(T|t)he(?=\sfat)" => <a href="#learn-regex"><strong>The</strong></a> fat cat sat on the mat.
|
"(T|t)he(?=\sfat)" => <a href="#learn-regex"><strong>The</strong></a> fat cat sat on the mat.
|
||||||
@ -429,11 +450,13 @@
|
|||||||
|
|
||||||
### 4.2 Отрицательное опережающее условие
|
### 4.2 Отрицательное опережающее условие
|
||||||
|
|
||||||
Отрицательное опережающее условие работает по обратному принципу: используется, когда нам нужно получить
|
Отрицательное опережающее условие работает по обратному принципу: используется,
|
||||||
все совпадения из входной строки, за которыми НЕ следует определенный шаблон. Отрицательное опережающее условие
|
когда нам нужно получить все совпадения из входной строки, за которыми НЕ
|
||||||
определяется таким же образом, как и позитивное, с той лишь разницей, что вместо равенства `=` мы ставим
|
следует определенный шаблон. Отрицательное опережающее условие определяется
|
||||||
восклицательный знак `!` (отрицание) например: `(?!...)`. Рассмотрим выражение `(T|t)he(?!\sfat)`, в котором мы
|
таким же образом, как и положительное, с той лишь разницей, что вместо равенства
|
||||||
находим все `The` или `the` слова из входной строки, за которыми не следует слово `fat`.
|
`=` мы ставим восклицательный знак `!` (логическое отрицание): `(?!...)`.
|
||||||
|
Пример: `(T|t)he(?!\sfat)` — ищем слова `The` или `the`, за которыми не следует
|
||||||
|
пробел и слово `fat`.
|
||||||
|
|
||||||
<pre>
|
<pre>
|
||||||
"(T|t)he(?!\sfat)" => The fat cat sat on <a href="#learn-regex"><strong>the</strong></a> mat.
|
"(T|t)he(?!\sfat)" => The fat cat sat on <a href="#learn-regex"><strong>the</strong></a> mat.
|
||||||
@ -443,9 +466,10 @@
|
|||||||
|
|
||||||
### 4.3 Положительное ретроспективное условие
|
### 4.3 Положительное ретроспективное условие
|
||||||
|
|
||||||
Положительное ретроспективное условие используется чтобы найти все совпадения, которым предшествует
|
Положительное ретроспективное условие используется чтобы найти все совпадения,
|
||||||
определенный шаблон. Условие определяется как `(?<=...)`. Например, выражение `(?<=(T|t)he\s)(fat|mat)` означает,
|
которым предшествует определенный шаблон. Условие определяется как `(?<=...)`.
|
||||||
найти все слова `fat` или `mat` из входной строки, которым предшествует слово `The` или `the`.
|
Например, выражение `(?<=(T|t)he\s)(fat|mat)` означает: "найти все слова `fat`
|
||||||
|
или `mat` из входной строки, которым предшествует слово `The` или `the`".
|
||||||
|
|
||||||
<pre>
|
<pre>
|
||||||
"(?<=(T|t)he\s)(fat|mat)" => The <a href="#learn-regex"><strong>fat</strong></a> cat sat on the <a href="#learn-regex"><strong>mat</strong></a>.
|
"(?<=(T|t)he\s)(fat|mat)" => The <a href="#learn-regex"><strong>fat</strong></a> cat sat on the <a href="#learn-regex"><strong>mat</strong></a>.
|
||||||
@ -455,9 +479,10 @@
|
|||||||
|
|
||||||
### 4.4 Отрицательное ретроспективное условие
|
### 4.4 Отрицательное ретроспективное условие
|
||||||
|
|
||||||
Отрицательное ретроспективное условие используется чтобы найти все совпадения, которым НЕ предшествует
|
Отрицательное ретроспективное условие используется, чтобы найти все совпадения,
|
||||||
определенный шаблон. Условие определяется как `(?<!...)`. Например, выражение `(?<!(T|t)he\s)(cat)` означает
|
которым НЕ предшествует определенный шаблон. Условие определяется так:
|
||||||
найти все слова `cat` из входной строки, которым не предшествует определенный артикль `The` или `the`.
|
`(?<!...)`. Выражение `(?<!(T|t)he\s)(cat)` означает "найти все слова `cat` из
|
||||||
|
входной строки, которым не предшествует определенный артикль `The` или `the`".
|
||||||
|
|
||||||
<pre>
|
<pre>
|
||||||
"(?<!(T|t)he\s)(cat)" => The cat sat on <a href="#learn-regex"><strong>cat</strong></a>.
|
"(?<!(T|t)he\s)(cat)" => The cat sat on <a href="#learn-regex"><strong>cat</strong></a>.
|
||||||
@ -467,22 +492,23 @@
|
|||||||
|
|
||||||
## 5. Флаги
|
## 5. Флаги
|
||||||
|
|
||||||
Флаги, также называемые модификаторами, изменяют вывод регулярного выражения.
|
Флаги, также называемые модификаторами, изменяют принцип работы регулярного
|
||||||
Эти флаги могут быть использованы в любом порядке или комбинации, и являются
|
выражения. Эти флаги могут быть использованы в любом порядке или комбинации, и
|
||||||
неотъемлемой частью регулярных выражений.
|
являются неотъемлемой частью регулярных выражений.
|
||||||
|
|
||||||
|Флаг|Описание|
|
|Флаг|Описание|
|
||||||
|:----:|----|
|
|:----:|----|
|
||||||
|i|Поиск без учета регистра|
|
|i|Поиск без учета регистра.|
|
||||||
|g|Глобальный поиск: поиск шаблона во всем входном тексте|
|
|g|Глобальный поиск: искать все вхождения шаблона в тексте, а не только первое совпадение.|
|
||||||
|m|Мультистроковый поиск: Якоря применяются к каждой строке.|
|
|m|Мультистроковый поиск: якоря применяются к строкам, а не ко всему тексту.|
|
||||||
|
|
||||||
### 5.1 Поиск без учета регистра
|
### 5.1 Поиск без учета регистра
|
||||||
|
|
||||||
Модификатор `i` используется для поиска без учета регистра. Например, регулярное выражение
|
Модификатор `i` используется для поиска без учета регистра. Например, регулярное
|
||||||
`/The/gi` означает заглавную `T` следом строчные `h` и `e`. В конце регулярного выражения флаг `i`,
|
выражение `/The/gi` означает заглавную `T` следом строчные `h` и `e`. В конце
|
||||||
указывающий движку регулярных выражений игнорировать регистр. Помимо `i`, для поиска шаблона во
|
регулярного выражения флаг `i`, указывающий библиотеке регулярных выражений
|
||||||
всем входном тексте, использован флаг `g`.
|
игнорировать регистр символов. Дополнительно для поиска шаблона во всем входном
|
||||||
|
тексте, использован флаг `g`.
|
||||||
|
|
||||||
<pre>
|
<pre>
|
||||||
"The" => <a href="#learn-regex"><strong>The</strong></a> fat cat sat on the mat.
|
"The" => <a href="#learn-regex"><strong>The</strong></a> fat cat sat on the mat.
|
||||||
@ -498,10 +524,12 @@
|
|||||||
|
|
||||||
### 5.2 Глобальный поиск
|
### 5.2 Глобальный поиск
|
||||||
|
|
||||||
Модификатор `g` используется для выполнения глобального сопоставления (найти все совпадения, а не останавливаться после первого).
|
Модификатор `g` используется для выполнения глобального сопоставления (найти все
|
||||||
Например, регулярное выражение `/.(at)/g` означает любой символ кроме символа новой строки, следом строчная `a`, далее строчная `t`.
|
совпадения, а не останавливаться после первого). К примеру, регулярное выражение
|
||||||
Из-за использования флага `g` в конце регулярного выражения, теперь оно найдет все совпадения во входной строке, а не остановится на первом
|
`/.(at)/g` означает: "любой символ (кроме начала новой строки), следом строчная
|
||||||
(что является поведением по умолчанию).
|
`a` и `t`". Благодаря флагу `g`, такое регулярное выражение найдёт все
|
||||||
|
совпадения во входной строке, а не остановится на первом (что является
|
||||||
|
поведением по умолчанию).
|
||||||
|
|
||||||
<pre>
|
<pre>
|
||||||
"/.(at)/" => The <a href="#learn-regex"><strong>fat</strong></a> cat sat on the mat.
|
"/.(at)/" => The <a href="#learn-regex"><strong>fat</strong></a> cat sat on the mat.
|
||||||
@ -518,11 +546,12 @@
|
|||||||
### 5.3 Мультистроковый поиск
|
### 5.3 Мультистроковый поиск
|
||||||
|
|
||||||
Модификатор `m` используется для многострочного поиска. Как мы обсуждали ранее,
|
Модификатор `m` используется для многострочного поиска. Как мы обсуждали ранее,
|
||||||
якоря `(^, $)` используются для проверки, является ли шаблон началом или концом входной строки.
|
якоря `(^, $)` используются для проверки, является ли шаблон началом или концом
|
||||||
Но если мы хотим, чтобы якоря работали в каждой строке, мы используем флаг `m`. Например,
|
входных данных. Но если мы хотим, чтобы якоря работали в каждой строке, мы
|
||||||
регулярное выражение `/at(.)?$/gm` означает строчную `a`, следом строчная `t` и любой
|
используем флаг `m`. Например, регулярное выражение `/at(.)?$/gm` означает:
|
||||||
символ кроме начала новой строки, идущий опционально (не обязательно). Из-за флага `m` механизм
|
"строчная `a`, следом строчная `t` и необязательный любой символ (кроме начала
|
||||||
регулярных выражений будет искать данный шаблон в конце каждой строки в тексте.
|
новой строки)". Благодаря флагу `m` библиотека регулярных выражений будет искать
|
||||||
|
данный шаблон в конце каждой строки в тексте.
|
||||||
|
|
||||||
<pre>
|
<pre>
|
||||||
"/.at(.)?$/" => The fat
|
"/.at(.)?$/" => The fat
|
||||||
@ -540,30 +569,33 @@
|
|||||||
|
|
||||||
[Запустить регулярное выражение](https://regex101.com/r/E88WE2/1)
|
[Запустить регулярное выражение](https://regex101.com/r/E88WE2/1)
|
||||||
|
|
||||||
## 6. Жадные vs ленивые квантификаторы
|
## 6. Жадная и ленивая квантификация
|
||||||
По умолчанию регулярное выражение выполняет жадное сопоставление, то есть оно будет
|
По умолчанию регулярное выражение выполняет жадное сопоставление, то есть оно
|
||||||
искать совпадения как можно дольше. Мы можем использовать `?` для ленивого поиска, который
|
будет искать самые длинные возможные совпадения. Мы можем использовать `?` для
|
||||||
будет стремиться быть как можно более коротким по времени.
|
ленивого поиска, который будет искать наименьшие возможные совпадения во входных
|
||||||
|
данных.
|
||||||
|
|
||||||
<pre>
|
<pre>
|
||||||
"/(.*at)/" => <a href="#learn-regex"><strong>The fat cat sat on the mat</strong></a>. </pre>
|
"/(.*at)/" => <a href="#learn-regex"><strong>The fat cat sat on the mat</strong></a>.
|
||||||
|
</pre>
|
||||||
|
|
||||||
|
|
||||||
[Запустить регулярное выражение](https://regex101.com/r/AyAdgJ/1)
|
[Запустить регулярное выражение](https://regex101.com/r/AyAdgJ/1)
|
||||||
|
|
||||||
<pre>
|
<pre>
|
||||||
"/(.*?at)/" => <a href="#learn-regex"><strong>The fat</strong></a> cat sat on the mat. </pre>
|
"/(.*?at)/" => <a href="#learn-regex"><strong>The fat</strong></a> cat sat on the mat.
|
||||||
|
</pre>
|
||||||
|
|
||||||
|
|
||||||
[Запустить регулярное выражение](https://regex101.com/r/AyAdgJ/2)
|
[Запустить регулярное выражение](https://regex101.com/r/AyAdgJ/2)
|
||||||
|
|
||||||
|
|
||||||
## Содействие
|
## Участвуйте в жизни репозитория
|
||||||
|
|
||||||
* Вы можете открыть пулл реквест с улучшением
|
* Откройте пулл реквест с исправлением
|
||||||
* Обсуждать идеи в issues
|
* Обсуждайте идеи в issues
|
||||||
* Распространять ссылку на репозиторий
|
* Распространяйте знания и ссылку на репозиторий
|
||||||
* Получить обратную связь через [](https://twitter.com/ziishaned)
|
* Приходите с отзывами к [](https://twitter.com/ziishaned)
|
||||||
|
|
||||||
## Лицензия
|
## Лицензия
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user