From eb62537b48ceb8379b4c0ec39238006a63718214 Mon Sep 17 00:00:00 2001
From: Seasle
"the" => The fat cat sat on the mat. @@ -91,9 +91,9 @@ [Запустить регулярное выражение](https://regex101.com/r/dmRygT/1) -Регулярное выражение `123` соответствует строке` 123`. Регулярное выражение сопоставляется с входной строкой, сравнивая -каждый символ в регулярном выражении с каждым символом во входной строке по одному символу за другим. Регулярные выражения -обычно чувствительны к регистру, поэтому регулярное выражение `The` не будет соответствовать строке` the`. +Регулярное выражение `123` соответствует строке `123`. Регулярное выражение сопоставляется с входной строкой, сравнивая +каждый символ в регулярном выражении с каждым символом во входной строке по одному символу за другим. Регулярные выражения +обычно чувствительны к регистру, поэтому регулярное выражение `The` не будет соответствовать строке `the`."The" => The fat cat sat on the mat. @@ -104,7 +104,7 @@ ## 2. Метасимволы Метасимволы это блоки, из которых строятся регулярные выражения. Метасимволы не означают что-то сами по себе, -вместо этого они интерпретируются для распознавания специальных групп символов. Некоторые метасимволы имеют +вместо этого они интерпретируются для распознавания специальных групп символов. Некоторые метасимволы имеют особые обозначения и пишутся в квадратных скобках. Существуют следующие метасимволы: |Метасимволы|Описание| @@ -119,14 +119,14 @@ |(xyz)|Группа символов. Находить только символы xyz в указанном порядке.| |||Чередование. Находить либо буквы до, либо буквы после символа.| |\|Экранирование. Позволяет находить зарезервированные символы:[ ] ( ) { } . * + ? ^ $ \ |
| -|^|Обозначает начало пользовательского ввода.| +|^|Обозначает начало пользовательского ввода.| |$|Обозначает конец пользовательского ввода.| ## 2.1 Точка Точка `.` это простейший пример метасимвола. Метасимвол `.` находит любой отдельный символ. Точка не будет находить символы перехода или перевода строки. -Например, регулярное выражение '.ar' обозначает: любой символ, за которым следуют буквы ` a` и `r`. +Например, регулярное выражение `.ar` обозначает: любой символ, за которым следуют буквы `a` и `r`.".ar" => The car parked in the garage. @@ -137,9 +137,9 @@ ## 2.2 Набор символов. Набор символов также называется классом символов. Квадратные скобки используются -для определения набора символов. Дефис используется для указания диапазона символов. -Порядок следования символов, заданный в квадратных скобках, не важен. Например, -регулярное выражение `[Tt]he` обозначает заглавную 'T' или строчную 't', за которой следуют буквы 'h' и 'e'. +для определения набора символов. Дефис используется для указания диапазона символов. +Порядок следования символов, заданный в квадратных скобках, не важен. Например, +регулярное выражение `[Tt]he` обозначает заглавную `T` или строчную `t`, за которой следуют буквы `h` и `e`."[Tt]he" => The car parked in the garage. @@ -147,8 +147,8 @@ [Запустить регулярное выражение](https://regex101.com/r/2ITLQ4/1) -Точка внутри набора символов, однако, обозначает непосредственно точку, как символ. -Регулярное выражение `ar[.]` обозначает строчную 'a', за которой следует 'r', за которой следует '.' (символ точки). +Точка внутри набора символов, однако, обозначает непосредственно точку, как символ. +Регулярное выражение `ar[.]` обозначает строчную `a`, за которой следует `r`, за которой следует `.` (символ точки)."ar[.]" => A garage is a good place to park a car. @@ -158,8 +158,8 @@ ### 2.2.1 Отрицание набора символов -Знак вставки '^' обозначает начало строки, однако, когда вы вписываете его после открытия квадратных скобок, он отрицает набор символов. -Например, регулярное выражение `[^c]ar` обозначает любой символ, кроме 'c', за которым следуют буквы 'a' и 'r'. +Знак вставки `^` обозначает начало строки, однако, когда вы вписываете его после открытия квадратных скобок, он отрицает набор символов. +Например, регулярное выражение `[^c]ar` обозначает любой символ, кроме `c`, за которым следуют буквы `a` и `r`."[^c]ar" => The car parked in the garage. @@ -169,15 +169,15 @@ ## 2.3 Повторения -Символы `+`, `*` or `?` используются для обозначения того, как сколько раз появляется какой-либо подшаблон. +Символы `+`, `*` или `?` используются для обозначения того, как сколько раз появляется какой-либо подшаблон. Данные метасимволы могут вести себя по-разному, в зависимости от ситуации. ### 2.3.1 Звёздочка -Символ `*` обозначает ноль или более повторений предыдущего совпадения. -Регулярное выражение `a *` означает ноль или более повторений предыдущего +Символ `*` обозначает ноль или более повторений предыдущего совпадения. +Регулярное выражение `a*` означает ноль или более повторений предыдущего строчного символа `a`. Если же символ появляется после набора или класса символов, -он находит повторения всего набора символов. Например, регулярное выражение `[a-z] *` +он находит повторения всего набора символов. Например, регулярное выражение `[a-z]*` означает любое количество строчных букв в строке.@@ -186,10 +186,10 @@ [Запустить регулярное выражение](https://regex101.com/r/7m8me5/1) -Символы можно комбинировать, так, например, символ `*` может использоваться с метасимволом `.` -для поиска одной строки с произвольным содержанием `. * `. Символ `*` может использоваться -с символом пробела `\ s`, чтобы находить строки с символами пробела. Например, выражение -`\ s * cat \ s *` означает: ноль или более пробелов, за которыми следует слово `cat`, +Символы можно комбинировать, так, например, символ `*` может использоваться с метасимволом `.` +для поиска одной строки с произвольным содержанием `.*`. Символ `*` может использоваться +с символом пробела `\s`, чтобы находить строки с символами пробела. Например, выражение +`\s*cat\s*` означает: ноль или более пробелов, за которыми следует слово `cat`, за которым следует ноль или более символов пробела.@@ -200,9 +200,9 @@ ### 2.3.2 Плюс -Символ `+` соответствует одному или более повторению предыдущего символа. Например, -регулярное выражение `c.+t` означает строчную `c`, за которой следует по крайней мере один символ, -следом за которым идёт символ `t`. Стоит уточнить, что в данном шаблоне, `t` является последним` t` в предложении. +Символ `+` соответствует одному или более повторению предыдущего символа. Например, +регулярное выражение `c.+t` означает строчную `c`, за которой следует по крайней мере один символ, +следом за которым идёт символ `t`. Стоит уточнить, что в данном шаблоне, `t` является последним `t` в предложении."c.+t" => The fat cat sat on the mat. @@ -212,9 +212,9 @@ ### 2.3.3 Знак вопроса -В регулярном выражении метасимвол `?` делает предыдущий символ необязательным. +В регулярном выражении метасимвол `?` делает предыдущий символ необязательным. Этот символ соответствует нулю или одному экземпляру предыдущего символа. -Например, регулярное выражение `[T]?he` означает необязательную заглавную букву `T`, за которой следуют символы 'h' и 'e'. +Например, регулярное выражение `[T]?he` означает необязательную заглавную букву `T`, за которой следуют символы `h` и `e`."[T]he" => The car is parked in the garage. @@ -230,9 +230,9 @@ ## 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. @@ -240,9 +240,9 @@ [Запустить регулярное выражение](https://regex101.com/r/juM86s/1) -Уберём второй номер (цифру 3), тогда, регулярное выражение `[0-9] {2,}` будет означать +Уберём второй номер (цифру 3), тогда, регулярное выражение `[0-9]{2,}` будет означать совпадение 2 или более цифр. Если мы также удалим запятую, то регулярное выражение -`[0-9] {3}` будет означать совпадение точно с 3 цифрами. +`[0-9]{3}` будет означать совпадение точно с 3 цифрами."[0-9]{2,}" => The number was 9.9997 but we rounded it off to 10.0. @@ -260,11 +260,11 @@ Скобочные группы это группы подшаблонов, которые написаны в круглых скобках `(...)`. Как мы уже говорили ранее в регулярном выражении, если мы поставим квантификатор -после символа, он будет повторять предыдущий символ. Но если мы поставим квантификатор после -скобочной группы, он будет искать всю группу. Например, регулярное выражение `(ab) *` соответствует +после символа, он будет повторять предыдущий символ. Но если мы поставим квантификатор после +скобочной группы, он будет искать всю группу. Например, регулярное выражение `(ab)*` соответствует нулю или более повторений символа "ab". Мы также можем использовать метасимвол чередования `|` внутри скобочной группы. Например, регулярное выражение `(c|g|p)ar` означает поиск одной из строчных букв `c`, -`g` или `p`, за которыми следуют буквы 'a' и 'r'. +`g` или `p`, за которыми следуют буквы `a` и `r`."(c|g|p)ar" => The car is parked in the garage. @@ -272,15 +272,15 @@ [Запустить регулярное выражение](https://regex101.com/r/tUxrBG/1) -Обратите внимание, что скобочные группы не только находят, но и захватывают символы для использования на родительском языке. +Обратите внимание, что скобочные группы не только находят, но и захватывают символы для использования на родительском языке. Родительским языком может быть python, javascript или практически любой язык, который реализует использование регулярных выражений как параметров функций. ### 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. @@ -289,16 +289,16 @@ [Запустить регулярное выражение](https://regex101.com/r/Rm7Me8/1) Не запоминающиеся группы пригодиться, когда они используются в функциях поиска и замены -или в сочетании со скобочными группами, например, для предпросмотра при создании скобочной группы или другого вида выходных данных, +или в сочетании со скобочными группами, например, для предпросмотра при создании скобочной группы или другого вида выходных данных, смотрите также [4. Опережающие и ретроспективные проверки](#4-опережающие-и-ретроспективные-проверки). ## 2.6 Альтернация В регулярных выражениях, вертикальная черта `|` используется для определения альтернации (чередования). Альтернация по своей сути похожа на оператор ИЛИ между логическими выражениями. Может создаться впечатление, что -чередование это то же самое, что и определение набора символов. Однако, большая разница между ними в том, что +чередование это то же самое, что и определение набора символов. Однако, большая разница между ними в том, что набор символов работает на уровне конкретных символов, в то время как альтернация работает на уровне выражений. -Например, регулярное выражение `(T|t)he|car` объединяет два шаблона (заглавная `T` ИЛИ строчная `t`, с продолжением из 'h' и 'e') и шаблон +Например, регулярное выражение `(T|t)he|car` объединяет два шаблона (заглавная `T` ИЛИ строчная `t`, с продолжением из `h` и `e`) и шаблон (строчная `c`, затем строчная `a`, за которой следует строчная `r`). Таким образом, в поиске будет участвовать любой из данных шаблонов, по аналогии с логической операцией ИЛИ в программировании и алгебре выражений. @@ -310,13 +310,13 @@ ## 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. @@ -326,19 +326,19 @@ ## 2.8 Якоря -Понятие якорей в регулярных выражениях используется для обозначения проверок, является ли +Понятие якорей в регулярных выражениях используется для обозначения проверок, является ли соответствующий символ начальным или конечным символом входной строки. Якоря бывают двух типов: Первый тип - Каретка `^`, проверяет, является ли соответствующий символ начальным символом в тексте. Второй тип - Доллар `$`, проверяет, является ли соответствующий символ последним символом входной строки. ### 2.8.1 Каретка -Символ каретки `^` используется для проверки, является ли соответствующий символ первым символом входной строки. +Символ каретки `^` используется для проверки, является ли соответствующий символ первым символом входной строки. Если мы применяем следующее регулярное выражение `^a` (если a является начальным символом) для строки `abc`, совпадение будет соответствовать букве `a`. Если же мы используем регулярное выражение `^b` на той же строке, -мы не получим совпадения, поскольку во входящей строке `abc` "b" не является первым символом. Рассмотрим другое +мы не получим совпадения, поскольку во входящей строке `abc` "b" не является первым символом. Рассмотрим другое регулярное выражение: `^(T|t)he`, обозначающее заглавную `T` или строчную `t` как первый символ, за которым следуют -символы букв 'h' и 'e'. Cоответственно: +символы букв `h` и `e`. Cоответственно:"(T|t)he" => The car is parked in the garage. @@ -371,10 +371,10 @@ [Запустить регулярное выражение](https://regex101.com/r/t0AkOd/1) -## 3. Наборы сокращений и диапазоны +## 3. Наборы сокращений и диапазоны Регулярные выражения предоставляют сокращения для часто используемых наборов символов, -которые предлагают удобные сокращения для часто используемых регулярных выражений. +которые предлагают удобные сокращения для часто используемых регулярных выражений. Наборы сокращенных символов следующие: |Сокращение|Описание| @@ -389,12 +389,12 @@ ## 4. Опережающие и ретроспективные проверки -Опережающие и ретроспективные проверки (в английской литературе lookbehind, lookahead) это особый вид -***не запоминающих скобочных групп*** (находящих совпадения, но не добавляющих в массив). +Опережающие и ретроспективные проверки (в английской литературе lookbehind, lookahead) это особый вид +***не запоминающих скобочных групп*** (находящих совпадения, но не добавляющих в массив). Данные проверки используются, мы знаем, что шаблон предшествует или сопровождается другим шаблоном. Например, мы хотим получить получить цену в долларах `$`, из следующей входной строки `$4.44 and $10.88`. Для этого используем следующее регулярное выражение `(?<=\$)[0-9\.]*`, означающее -получение всех дробных (с точкой `.`) цифр, которым предшествует знак доллара `$`. Существуют +получение всех дробных (с точкой `.`) цифр, которым предшествует знак доллара `$`. Существуют следующие виды проверок: |Символ|Описание| @@ -407,11 +407,11 @@ ### 4.1 Положительное опережающее условие Положительное опережающее утверждение (assert) означает, что за первой частью выражения должно следовать -опережающее выражение (lookahead expression). (по аналогии с условиями, if (..) then (..)). -Возвращенное совпадение содержит только текст, который соответствует первой части выражения. +опережающее выражение (lookahead expression). (по аналогии с условиями, if (..) then (..)). +Возвращенное совпадение содержит только текст, который соответствует первой части выражения. Для определения положительного опережающего условия используются круглые скобки. В этих скобках используется -знак вопроса со знаком равенства: `(?=...)`. Опережающее выражение, записывается в скобках после знака равенства. -Рассмотрим пример регулярного выражения: `(T|t)he(?=\sfat)`, обозначающее опциональное наличие строчной `t` или заглавной `T`, +знак вопроса со знаком равенства: `(?=...)`. Опережающее выражение, записывается в скобках после знака равенства. +Рассмотрим пример регулярного выражения: `(T|t)he(?=\sfat)`, обозначающее опциональное наличие строчной `t` или заглавной `T`, следом буквы `h` и `e`. В скобках, мы определяем положительное опережающее условие, которое сообщает движку регулярных выражений информацию о том, что после шаблона `The` или `the` будет следовать слово `fat`. @@ -423,7 +423,7 @@ ### 4.2 Отрицательное опережающее условие -Отрицательное опережающее условие работает по обратному принципу: используется, когда нам нужно получить +Отрицательное опережающее условие работает по обратному принципу: используется, когда нам нужно получить все совпадения из входной строки, за которыми НЕ следует определенный шаблон. Отрицательное опережающее условие определяется таким же образом, как и позитивное, с той лишь разницей, что вместо равенства `=` мы ставим восклицательный знак `!` (отрицание) например: `(?!...)`. Рассмотрим выражение `(T|t)he(?!\sfat)`, в котором мы @@ -438,8 +438,8 @@ ### 4.3 Положительное ретроспективное условие Положительное ретроспективное условие используется чтобы найти все совпадения, которым предшествует -определенный шаблон. Условие определяется как `(?<=...)`. Например, выражение `(?<=(T|t)he\s)(fat|mat)` означает, -найти все слова `fat` или `mat` из входной строки, которым предшествует слово `The` or `the`. +определенный шаблон. Условие определяется как `(?<=...)`. Например, выражение `(?<=(T|t)he\s)(fat|mat)` означает, +найти все слова `fat` или `mat` из входной строки, которым предшествует слово `The` или `the`."(?<=(T|t)he\s)(fat|mat)" => The fat cat sat on the mat. @@ -461,7 +461,7 @@ ## 5. Флаги -Флаги, также называемые модификаторами, изменяют вывод регулярного выражения. +Флаги, также называемые модификаторами, изменяют вывод регулярного выражения. Эти флаги могут быть использованы в любом порядке или комбинации, и являются неотъемлемой частью регулярных выражений. @@ -474,8 +474,8 @@ ### 5.1 Поиск без учета регистра Модификатор `i` используется для поиска без учета регистра. Например, регулярное выражение -`/The/gi` означает заглавную `T` следом строчные `h` и `e`. В конце регулярного выражения флаг `i`, -указывающий движку регулярных выражений игнорировать регистр. Помимо `i`, для поиска шаблона во +`/The/gi` означает заглавную `T` следом строчные `h` и `e`. В конце регулярного выражения флаг `i`, +указывающий движку регулярных выражений игнорировать регистр. Помимо `i`, для поиска шаблона во всем входном тексте, использован флаг `g`.@@ -493,8 +493,8 @@ ### 5.2 Глобальный поиск Модификатор `g` используется для выполнения глобального сопоставления (найти все совпадения, а не останавливаться после первого). -Например, регулярное выражение `/.(at)/g` означает любой символ кроме символа новой строки, следом строчная `a`, далее строчная `t`. -Из-за использования флага `g` в конце регулярного выражения, теперь оно найдет все совпадения во входной строке, а не остановится на первом +Например, регулярное выражение `/.(at)/g` означает любой символ кроме символа новой строки, следом строчная `a`, далее строчная `t`. +Из-за использования флага `g` в конце регулярного выражения, теперь оно найдет все совпадения во входной строке, а не остановится на первом (что является поведением по умолчанию).@@ -513,9 +513,9 @@ Модификатор `m` используется для многострочного поиска. Как мы обсуждали ранее, якоря `(^, $)` используются для проверки, является ли шаблон началом или концом входной строки. -Но если мы хотим, чтобы якоря работали в каждой строке, мы используем флаг `m`. Например, -регулярное выражение `/at(.)?$/gm` означает строчную `a`, следом строчная `t` и любой -символ кроме начала новой строки, идущий опционально (не обязательно). Из-за флага `m` механизм +Но если мы хотим, чтобы якоря работали в каждой строке, мы используем флаг `m`. Например, +регулярное выражение `/at(.)?$/gm` означает строчную `a`, следом строчная `t` и любой +символ кроме начала новой строки, идущий опционально (не обязательно). Из-за флага `m` механизм регулярных выражений будет искать данный шаблон в конце каждой строки в тексте.@@ -535,7 +535,7 @@ [Запустить регулярное выражение](https://regex101.com/r/E88WE2/1) ## 6. Жадные vs ленивые квантификаторы -По умолчанию регулярное выражение выполняет жадное сопоставление, то есть оно будет +По умолчанию регулярное выражение выполняет жадное сопоставление, то есть оно будет искать совпадения как можно дольше. Мы можем использовать `?` для ленивого поиска, который будет стремиться быть как можно более коротким по времени.