3.3 KiB
3.3 KiB
title, slug
| title | slug |
|---|---|
| Продвинутые регулярные выражения | прочее-регулярные-выражения/продвинутые-регулярные-выражения |
Продвинутые операторы регулярных выражений
Эти конструкции дают больше контроля над поиском и заменой текста.
🧱 1. {n}, {n,}, {n,m} — точное количество повторений
{n}— ровно n повторений{n,}— минимум n повторений{n,m}— от n до m повторений
Примеры:
a{3}—aaaa{2,4}—aa,aaa,aaaa
2. (?...) — специальные конструкции
2.1 (?:...) — негруппирующая скобка
- Не сохраняет группу для дальнейшего обращения
Пример:
(?:abc)+— совпадает сabcabc, но не сохраняетabcкак отдельную группу
2.2 (?=...) — позитивная опережающая проверка (lookahead)
- Условие, что далее по тексту есть шаблон
Пример:
\d(?=px)— цифра передpx, например:5px→ совпадает5
2.3 (?!...) — негативная опережающая проверка
- Условие, что далее по тексту нет шаблона
Пример:
foo(?!bar)— найдётfoo, не за которым идётbar
3. (?<=...) и (?<!...) — lookbehind (опережающее назад)
(?<=...)— есть шаблон до(?<!...)— нет шаблона до
Пример:
(?<=@)\w+— найдёт слово после символа@(например,gmailвuser@gmail.com)
4. \b и \B — границы слова
\b— граница слова\B— НЕ граница слова
Примеры:
\bword\b— точное словоword\Bword—password,sword
5. Рекурсивные шаблоны (в некоторых движках)
Некоторые реализации (например, PCRE) поддерживают вложенные структуры:
\((?>[^()]+|(?R))*\)
Этот шаблон находит корректно вложенные скобки. Используется редко.
6. Обратные ссылки (Backreferences)
Позволяют ссылаться на уже найденные группы.
Пример:
- Шаблон:
(\w+) \1 - Совпадёт с:
test test,hello hello
7. Условные выражения
Поддерживаются не везде, но позволяют задать условия:
(?(1)yes|no)
Если группа 1 существует, будет yes, иначе no.