Регуля?рные выраже?ния (англ. 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-подобных систем, то вы можете подписаться на мой телеграм-канал, там много всякого разного и полезного.
CoolCmd
вот шпаргалка, или вот. всегда полные и актуальные, а не то что в этой статье.
silvestr22
тут на русском ))
CoolCmd
там тоже есть русский
Saymon
у первой нет русского, только испанский в качестве альтернативы. А у второго написано так, что для меня все равно что английский. Так что статья по мне годная, т.к. действительно на русском разжевывает для нулей.
CoolCmd
любой человек, включая автора этой статьи, может добавить/исправить перевод на сайте mdn. но автор предпочел написать здесь. видимо, потому что на mdn нет кармы и денег.