Продвинутые регулярные выражения
🚀 Продвинутые операторы регулярных выражений
Эти конструкции дают больше контроля над поиском и заменой текста.
🧱 1. {n}
, {n,}
, {n,m}
— точное количество повторений
{n}
— ровно n повторений{n,}
— минимум n повторений{n,m}
— от n до m повторений
Примеры:
a{3}
—aaa
a{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
.