Регулярные выражения

https://regex101.com/

Регулярные выражения представляют собой специальную текстовую строку, которая задает шаблон поиска (от английского pattern) с использованием тех символов, которые нужно найти, и специальных символов.

. – один любой символ

\. – экранирование символа

Символьный класс — это специальное обозначение, задающее поиск любого символа из определенного набора. Описываются в квадратных скобках.

[a-z] – строчные буквы английского алфавита

[0-9] – цифры

[^aj] — ^ — инвертирование

Дефис указывается в начале и в конце группы — / [aj-]

\d – цифры; \D – не цифры

\s – пробельные символы; \S – не пробельные символы

\w – буквы, цифры и нижнее подчеркивание; \W – остальное

^ — поиск в начале строки (/^java)

$ — поиск в конце строки (/script$)

Специальный символ \b позволяет найти символ относительно границ слова. (/a\b – найдет a в конце слова; /\ba– найдет a в начале слова)

\B —  найти все символы, не находящиеся в конце слова (/a\B – найдет символы a вначале и внутри слова; /\Ba – найдет символы a на краях и внутри слова; /\Ba\B – только внутри слова)

| — означает ИЛИ (/gr(a|e)y – grey / gray)

Квантификация — это поиск последовательностей. Квантификатор — это специальный ограничитель, который указывает количество возможных повторений символа, группы символов или класса символов, находящихся в регулярном выражении перед ним.

? —  обозначает поиск совпадений с повторением от нуля до одного раза (/colou? //

color, colour, colouur, colouuur)

 + — квантификатор означает, что предшествующий ему символ, группа или класс символов, должны повторяться как минимум один раз.

* отсутствие повторений или повторения несколько раз, что дает нам совпадение во всех подстроках

{} — указать в них необходимое число или диапазон повторений (в т.ч. допускается не указывать верхнюю / нижнюю границу)

  • /colou{2,3}r
  • /colou{2,}r
  • /colou{2}r

Жадное сопоставление — квантификатор повторяется столько раз, сколько это возможно. По умолчанию в регулярных выражениях квантификация жадная

Чтобы избежать жадного поведения, вместо любого символа внутри тэга мы можем задать любой символ, за исключением закрывающего.

Когда ? идёт сразу после квантификатора, он рассматривается регулярным выражением как специальный символ, который из жадных квантификаторов делает ленивые.

По умолчанию все группы символов, которые мы создаем, записываются в специальную область памяти и маркируются символами от \1 до \9. Если бы мы использовали квантификацию, то это не повлияло бы на результат, потому что она не участвует в обратной связи и берётся только первое вхождение в область памяти

/(ta|tu)-\1  //ta-tu ta-ta tu-tu

Если вы используете несколько групп, то не очень удобно запоминать их по номерам. Гораздо проще пользоваться именами. Для этого нужно добавить ?<имя> после открытия скобки.

Отключить обратную связь можно поставив ?: внутри группы

Для атомарной группировки вместо : используется символ >

/a(?>bc|b|x)cc //abccaxcc

сначала находится символ a, затем — bc, после чего идет поиск cc. В обычном случае в примере выше поиск откатился бы до a и продолжил бы проверку с b, поскольку стоит символ альтернативы |. После этого мы бы дошли до cc и проверка бы сработала.

Атомарная группировка не поддерживается некоторыми популярными языками программирования, в том числе JavaScript и Python.

Но при атомарной группировке возврат по строке до символа a отключается, и происходит дальнейшее движение по альтернативам bc -> b -> x, а после x — сопоставление cc.

Модификаторы — это символы, которые указываются после знака ? в группе символов регулярного выражения и меняют их поведение.

 Если после ? мы поставим i, то включим режим игнорирования регистра и получим сопоставление ещё одной подстроки

Модификатор s делает так, что точка начинает включать в себя перевод строки и возврат каретки.

Модификаторы могут быть отключены. Для этого достаточно указать перед ними

iСамый важный модификатор, указав который регистр (строчная или прописная буква) при поиске соответствий учитываться не будет.
UЕсли указать данный модификатор, то будет вестись поиск минимального по длине соответствия. По умолчанию же ищется максимальное по длине соответствие.
mДанный модификатор будет искать соответствие только в одной строке, а не по всему тексту.
sПротивоположность модификатору m, то есть, указав данный модификатор, соответствие будет искаться по всему тексту.
xПри использовании данного модификатора пробельные символы будут игнорироваться. То есть Вы можете написать хоть 100 пробелов, и они будут опущены. Если, конечно, Вы их не экранируете (с помощью «\«).

Регулярное выражение a(?=b) находит совпадения таких a, за которыми следует b, не делая b частью сопоставления.

Просмотр вперёд также может быть негативным — тогда он будет искать совпадения в тех подстроках, где указанная в скобках часть подстроки отсутствует a(?!b)

Просмотр назад: (?<=b)a   (?

Регулярные выражения поддерживают поиск по условию.

/(?(?<=condition)if_true|if_false)

/(?(?<=a)m|p)   //mam,pap

Флаги

По умолчанию ищется первое соответствие, после чего поиск останавливается. Для изменения поведения используются флаги

/g, который называется «глобальный» или global, включает поиск всех сопоставлений в строке и не останавливает поиск после первого совпадения

флаг /i включает режим игнорирования регистра

флаг /s включает соответствие метасимвола . переводу строки, то есть делает так, что строка, в которой ищутся совпадения, может быть представлена как одна строчка

You may also like...

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *