[*nix, Регулярные выражения] Галопом по основам Regex

Автор Сообщение
news_bot ®

Стаж: 6 лет 9 месяцев
Сообщений: 27286

Создавать темы news_bot ® написал(а)
22-Мар-2021 20:32


Регуля́рные выраже́ния (англ. 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-подобных систем, то вы можете подписаться на мой телеграм-канал, там много всякого разного и полезного.
===========
Источник:
habr.com
===========

Похожие новости: Теги для поиска: #_*nix, #_reguljarnye_vyrazhenija (Регулярные выражения), #_regex, #_*nix, #_reguljarnye_vyrazhenija (
Регулярные выражения
)
Профиль  ЛС 
Показать сообщения:     

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

Текущее время: 22-Ноя 21:15
Часовой пояс: UTC + 5