* [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)
## Что такое Регулярное выражение?
> Регулярное выражение - это группа букв или символов, которая используется для поиска определенного шаблона в тексте.
Регулярное выражение - это шаблон, сопоставляемый с искомой строкой слева направо.
Термин «Регулярное выражение» сложно произносить каждый раз, поэтому, обычно, вы будете сталкиваться с сокращениями "регэкспы" или "регулярки".
Регулярные выражения используются для замен текста внутри строк, валидации форм,
извлечений подстрок по определенным шаблонам и множества других вещей.
Представьте, что вы пишете приложение и хотите установить правила, по которым пользователь выбирает свой юзернейм. Мы хотим, чтобы имя пользователя содержало буквы, цифры, подчеркивания и дефисы. Мы также хотим ограничить количество символов в имени пользователя, чтобы оно не выглядело безобразно.
Для этого, используем следующее регулярное выражение:
Точка `.` это простейший пример метасимвола. Метасимвол `.`
находит любой отдельный символ. Точка не будет находить символы перехода или перевода строки.
For example, the regular expression `.ar` means: any character, followed by the
letter `a`, followed by the letter `r`. Например, регулярное выражение '.ar' обозначает: любой символ, за которым следуют буквы ` a` и `r`.
<pre>
".ar" => The <ahref="#learn-regex"><strong>car</strong></a><ahref="#learn-regex"><strong>par</strong></a>ked in the <ahref="#learn-regex"><strong>gar</strong></a>age.
В фигурных скобках, которые также называются квантификаторами, указывается,
сколько раз символ или группа символов могут повторяться. Например, регулярное выражение
`[0-9] {2,3}` означает совпадение не менее 2 но не более 3 цифр в диапазоне от 0 до 9.
<pre>
"[0-9]{2,3}" => The number was 9.<ahref="#learn-regex"><strong>999</strong></a>7 but we rounded it off to <ahref="#learn-regex"><strong>10</strong></a>.0.
Уберём второй номер (цифру 3), тогда, регулярное выражение `[0-9] {2,}` будет означать
совпадение 2 или более цифр. Если мы также удалим запятую, то регулярное выражение
`[0-9] {3}` будет означать совпадение точно с 3 цифрами.
<pre>
"[0-9]{2,}" => The number was 9.<ahref="#learn-regex"><strong>9997</strong></a> but we rounded it off to <ahref="#learn-regex"><strong>10</strong></a>.0.
Скобочные группы это группы подшаблонов, которые написаны в круглых скобках
`(...)`. Как мы уже говорили ранее в регулярном выражении, если мы поставим квантификатор
после символа, он будет повторять предыдущий символ. Но если мы поставим квантификатор после
скобочной группы, он будет искать всю группу. Например, регулярное выражение `(ab) *` соответствует
нулю или более повторений символа "ab". Мы также можем использовать метасимвол чередования `|`
внутри скобочной группы. Например, регулярное выражение `(c|g|p)ar` означает поиск одной из строчных букв `c`,
`g` или `p`, за которыми следуют буквы 'a' и 'r'.
<pre>
"(c|g|p)ar" => The <ahref="#learn-regex"><strong>car</strong></a> is <ahref="#learn-regex"><strong>par</strong></a>ked in the <ahref="#learn-regex"><strong>gar</strong></a>age.
Обратите внимание, что скобочные группы не только находят, но и захватывают символы для использования на родительском языке.
Родительским языком может быть python, javascript или практически любой язык, который реализует использование регулярных выражений как параметров функций.
### 2.5.1 Не запоминающие скобочные группы
Бывает так, что группу определить нужно, а вот запоминать их содержимое в массиве не требуется.
Подобный трюк осуществляется при помощи зарезервированной комбинации `?:`
в круглых скобках `(...)`. Например, регулярное выражение `(?:c|g|p)ar` будет находить такие же шаблоны как и
`(c|g|p)ar`, однако скобочная группа при этом создана не будет.
<pre>
"(?:c|g|p)ar" => The <ahref="#learn-regex"><strong>car</strong></a> is <ahref="#learn-regex"><strong>par</strong></a>ked in the <ahref="#learn-regex"><strong>gar</strong></a>age.
Не запоминающиеся группы пригодиться, когда они используются в функциях поиска и замены
или в сочетании со скобочными группами, например, для предпросмотра при создании скобочной группы или другого вида выходных данных,
смотрите также [4. Опережающие и ретроспективные проверки](#4-опережающие-и-ретроспективные-проверки).
## 2.6 Альтернация
В регулярных выражениях, вертикальная черта `|` используется для определения альтернации (чередования).
Альтернация по своей сути похожа на оператор ИЛИ между логическими выражениями. Может создаться впечатление, что
чередование это то же самое, что и определение набора символов. Однако, большая разница между ними в том, что
набор символов работает на уровне конкретных символов, в то время как альтернация работает на уровне выражений.
Например, регулярное выражение `(T|t)he|car` объединяет два шаблона (заглавная `T` ИЛИ строчная `t`, с продолжением из 'h' и 'e') и шаблон
(строчная `c`, затем строчная `a`, за которой следует строчная `r`). Таким образом, в поиске будет участвовать любой из данных шаблонов,
по аналогии с логической операцией ИЛИ в программировании и алгебре выражений.
<pre>
"(T|t)he|car" => <ahref="#learn-regex"><strong>The</strong></a><ahref="#learn-regex"><strong>car</strong></a> is parked in <ahref="#learn-regex"><strong>the</strong></a> garage.
Обратный слэш `\` используется в регулярных выражениях для экранирования следующего символа.
Это позволяет формировать шаблоны с поиском зарезервированных символамов, таких как `{ } [ ] / \ + * . $ ^ | ?`.
Для использования спецсимвола в шаблоне необходимо указать символ '\' перед ним.
Как упомянуто выше, символ `.` является зарезервированным и соответствует любому значению, кроме символа новой строки.
Бывают ситуации, когда необходимо найти точку в предложении, для таких случаев применимо экранирование. Рассмотрим выражение
`(f|c|m)at\.?`, что соответствует следующему шаблону: стройчный символ `f`, `c` или `m`, за которым следует строчные буквы `a` и `t`, с опциональной `.` точкой в конце.
<pre>
"(f|c|m)at\.?" => The <ahref="#learn-regex"><strong>fat</strong></a><ahref="#learn-regex"><strong>cat</strong></a> sat on the <ahref="#learn-regex"><strong>mat.</strong></a>
Символ доллара `$` используется для проверки, является ли соответствующий символ
последним символом входной строки. Например, регулярное выражение `(at\.)$` последовательность из
строчной `a`, строчной `t`, и точки `.`, ключевой момент в том, что благодаря доллару этот шаблон будет
находить совпадения только в том случае, если будет наблюдаться в конце строки. Например:
<pre>
"(at\.)" => The fat c<ahref="#learn-regex"><strong>at.</strong></a> s<ahref="#learn-regex"><strong>at.</strong></a> on the m<ahref="#learn-regex"><strong>at.</strong></a>
"/.(at)/g" => The <ahref="#learn-regex"><strong>fat</strong></a><ahref="#learn-regex"><strong>cat</strong></a><ahref="#learn-regex"><strong>sat</strong></a> on the <ahref="#learn-regex"><strong>mat</strong></a>.
* Получить обратную связь через [](https://twitter.com/ziishaned)
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.