kb-personal/src/content/docs/knowledge-base/Прочее/Регулярные выражения/Продвинутые регулярные выражения.md
2025-10-12 23:13:17 +05:00

109 lines
3.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
title: Продвинутые регулярные выражения
slug: прочее-регулярные-выражения/продвинутые-регулярные-выражения
---
# Продвинутые операторы регулярных выражений
Эти конструкции дают больше контроля над поиском и заменой текста.
---
## 🧱 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) поддерживают вложенные структуры:
```regexp
\((?>[^()]+|(?R))*\)
```
Этот шаблон находит корректно вложенные скобки. Используется редко.
---
## 6. Обратные ссылки (Backreferences)
Позволяют ссылаться на уже найденные группы.
**Пример:**
- Шаблон: `(\w+) \1`
- Совпадёт с: `test test`, `hello hello`
---
## 7. Условные выражения
Поддерживаются не везде, но позволяют задать условия:
```regexp
(?(1)yes|no)
```
Если группа 1 существует, будет `yes`, иначе `no`.
---
## Полезные ресурсы
- [regex101.com](https://regex101.com/)
- [Regular Expressions Cheat Sheet (MDN)](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions/Cheatsheet)
- [rexegg.com](https://www.rexegg.com/)