Регуля?рные выраже?ния (англ. regular expressions) — формальный язык поиска и осуществления манипуляций с подстроками в тексте, основанный на использовании метасимволов (символов-джокеров, англ. wildcard characters). Для поиска используется строка-образец (англ. pattern, по-русски её часто называют «шаблоном», «маской»), состоящая из символов и метасимволов и задающая правило поиска. Для манипуляций с текстом дополнительно задаётся строка замены, которая также может содержать в себе специальные символы.

Регулярные выражения — Википедия

Регулярные выражения нужны для поиска определённых строк с помощью специальных выражений. Вы можете манипулировать с текстом с помощью Regex в следующих приложениях:


  • VSCode


  • Vim (NeoVim)


  • Emacs


  • Notepad++


  • Sublime


  • Jetbrains IDE


  • awk (консольная утилита)


  • sed (консольная утилита)



Также Regex часто используют в ЯП (Python, JS, C++, PHP, и т.д.)


Основы основ


Для начала нужно понять что в Regex есть специальные символы (например символ начала строки — ^), если вы хотите просто найти данный символ, то нужно ввести обратный слеш \ перед символом для того, чтобы символ не работал как команда.


Для того чтобы найти текст, нужно собственно просто ввести этот текст:


some text

Якори


^ — символ который обозначает начало строки


$ — символ который обозначает конец строки


Найдем строки которые начинаются с The Beginning:


^The Beginning

Найдем строки, которые заканчиваются на The End:


The End$

Найдем строки, которые начинаются и заканчиваются на The Beginning and The End:


^The Beginning and The End$

Найдем пустые строки:


^$

Квантификаторы


Обратите внимание на примеры, там всё сразу станет ясно

? — символ, который указывает на то, что выражение до него должно встретиться 0 или 1 раз


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


* — символ, который указывает на то, что выражение до него должно встретиться 0 или неопределённое количество раз


{2} — скобки с одним аргументом указывают сколько раз выражение до них должно встретиться


{2,5} — скобки с двумя аргументами указывают на то, от скольки до скольки раз выражение до них должно встретиться


(string) — скобки объединяют какое-то предложение в выражение. Обычно используется в связке с квантификаторами


Давайте попробуем найти текст, в котором будут искаться все слова, содержащие ext или ex:


ext?

В данном случае ? указывает на одну букву — t.

Давайте попробуем найти текст, в котором слова будут содержать ext или e:


e(xt)?

В данном случае ? будет распространяться на выражение в скобках

Найти все размеры одежды (XL, XXL, XXXL):


X{1,3}L

В данном случае X умножается от 1 до 3

Найти все слова, у которых есть неограниченное число символов c, после которых идёт haracter:


c*haracter

В данном случае c может повторяться от 0 до неограниченного количества раз

Найти выражение, в котором слово word повторяется от одного до неограниченного количества раз:


(word)+

В данном случае выражение word может повторяться от одного до неограниченного количества раз

Найти выражение, в котором выражение ch повторяется от 3 до неограниченного количества раз:


(ch){3,}

В данном случае выражение ch может повторяться от 3-х до неограниченного количества раз

Выражение "или"


| — символ, который обозначает оператор "или"


[text] — выражение в квадратных скобках ставит или между каждым подвыражением


Найти все слова, в которых есть буквы a,e,c,h,p:


[aechp]

В данном случае будут выбираться все подфразы в квадратных скобках, то есть все буквы по отдельности

Найти все выражения в которых есть ch или pa:


(ch)|(pa)

В данном случае будут находиться все выражения, в которых точно будет ch или pa

Escape-последовательности


\d — отмечает один символ, который является цифрой (digit)\


\D — отмечает символ, который не является цифрой


\w — отмечает любой символ (число или букву (или подчёркивание)) (word)


\s — отмечает любой пробельный символ (space character)


. — отмечает любой символ (один)


Выражения в квадратных скобках


Кроме того, что квадратные скобки служат оператором "или" между каждым символом, который в них заключён, они также могут служить и для некоторых перечислений:


[0-9] — один символ от 0 до 9


[a-z] — любой символ от a до z


[A-Z] — любой символ от A до Z


[^a-z] — любой символ кроме a — z


Найти все выражения, в которых есть английские буквы в нижнем регистре или цифры:


[a-z\d]

В данном случае мы будем искать все буквы в нижнем регистре, а также цифры (цифры ищутся с помощью Escape-последовательности)

Флаги


Флаги — символы (набор символов), которые отвечают за то, каким именно образом будет происходить поиск.


Форма условия поиска в Regex выглядит вот так:


команда/условие для поиска/флаги

g — флаг, который будет отмечать все выражения, которые соответствуют условиям поиска (по умолчанию поиск возвращает только первое выражение, которое подходит по условию) (global)


i — флаг, который заставляет искать выражения вне зависимости от региста (case insensitive)


В заключение


Теперь вы знаете базовые знания по Regex и можете использовать их в языках программирования, консольных утилитах или в программируемых редакторах (привет, Vim). Если вам интересен данный материал, а также интересны темы веб-разработки и администрирования Unix-подобных систем, то вы можете подписаться на мой телеграм-канал, там много всякого разного и полезного.