109 lines
3.3 KiB
Markdown
109 lines
3.3 KiB
Markdown
---
|
||
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/)
|
||
|