Сводное руководство по регулярным выражениям

Обзор

Практическое руководство по безопасному и переносимому использованию регулярных выражений.
Без применения флагов вроде (?s), (?m), (?i) — только устойчивые паттерны, одинаково работающие в разных ОС и инструментах.


Различия перевода строк

ОС Код перевода строки Рекомендуемый шаблон Примечание
Windows \r\n \r?\n Универсально для CRLF и LF
macOS / Linux \n \r?\n Одинаково работает на всех

Важно

  • Для поиска или замены перевода строки используйте \r?\n.
  • Для выборки многострочного блока применяйте (?:.|\r|\n), так как . не совпадает с переводом строки.

Часть 1: Базовый синтаксис

1-1. Классы символов и диапазоны

Шаблон Значение Пример Совпадение
. Любой символ, кроме перевода строки a.c / abc abc
[abc] a, b или c bag a
[^0-9] Не цифра a1 a
[A-Z0-9] Заглавная буква или цифра X8z X, 8

1-2. Квантификаторы

Шаблон Значение Пример Совпадение
* 0 и более раз goooogle goooo
+ 1 и более раз google oo
? 0 или 1 раз color colour Оба совпадают
{n} Ровно n раз a{3} / aaa aaa
{n,} Не менее n раз a{2,} / aaaa aaaa
{n,m} От n до m раз a{2,4} / aaaaa aaaa

1-3. Якоря

Шаблон Значение Пример Совпадение
^abc abc в начале строки abc\nzabc первая строка
abc$ abc в конце строки zabc\nabc обе строки
\bword\b Слово целиком word words word
\Bing Не в границе слова ringing вторая часть ing

1-4. Специальные обозначения

Шаблон Значение Пример Совпадение
\d Цифра [0-9] ver2.10 2,10
\D Не цифра a1 a
\w Буква, цифра, _ a_b-1 a_b
\W Не \w a# #
\s Пробел/таб/перевод строки a b пробел
\S Не пробел a b a,b
\t Табуляция a\tb a[TAB]b

1-5. Экранирование спецсимволов

Шаблон Символ Пример Совпадение
\. Точка a.c a.c
\* Звёздочка a*b a*b
\+ Плюс a+b a+b
\? Вопрос what? what?
\( \) Скобки (test) (test)
| Вертикальная черта `a b`
\\ Обратный слэш C:\\path \\
\^ Крышка ^abc ^abc
\$ Знак доллара total$ $
\[ \] Квадратные скобки [abc] [abc]
\{ \} Фигурные скобки {a,b} {a,b}

Часть 2: Группировка, ветвления, проверки

Шаблон Назначение Пример Совпадение
(abc)+ Повтор группы abcabcx abcabc
`(?:jpg png)` Некаптурирующая альтернатива file.png
`foo bar` OR bar
\d+(?=円) Число перед “円” 合計100円 100
^(?!.*error).* Строки без “error” ok\nerror ok
(?<=¥)\d+ После “¥” ¥300 300
(?<!Mr\.)\s[A-Z] Заглавная, не после “Mr.” Ms. Alice A

Часть 3: Примеры с многострочными данными

Назначение Шаблон Пример Совпадение
HTML-блок `<div>(?:. \r \n)*?</div>`
Запись лога `^[\d{4}-\d{2}-\d{2} [\d:]+](?:. \r \n)*?(?=^[\d{4}-\d{2}-\d{2}
Код-блок Markdown « «`(?:. \r \n)*?«` «
Комментарий /*…*/ `/*(?:. \r \n)*?*/`

Часть 4: Практические шаблоны

Назначение Шаблон Пример Совпадение
Только цифры ^\d+$ 123 123
Только латиница и цифры ^[A-Za-z0-9]+$ user01 user01
Email (простой) ^[\w.-]+@[\w.-]+\.[A-Za-z]{2,}$ a@b.com a@b.com
URL https?://[\w.-]+\.[A-Za-z]{2,}(/[\w./?=&%-]*)? https://ex.com/a весь URL
Дата ISO \d{4}-\d{2}-\d{2} 2025-10-30 2025-10-30
Телефон международный \+\d{1,3}[\s-]?\d{1,14} +81 90 1234 5678 весь номер
Пароль (сильный) ^(?=.*[a-z])(?=.*[A-Z])(?=.*\d).{8,}$ Abcd1234 весь текст
HTML-комментарий `<!—(?:. \r \n)*?—>`
Без “error” ^(?!.*error).* ok\nerror ok

Часть 5: Примеры замены

Задача Шаблон Замена Пример Результат
Инвертировать порядок слов (\w+)\s+(\w+) ${2} ${1} John Doe Doe John
Заменить разделитель ; , a;b;c a,b,c
Удалить лишние пробелы \s{2,} a b a b
Удалить HTML-теги <[^>]+> « <p>a</p> a
Обрезать пробелы `^\s+ \s+$` « a
Перевод строки → пробел \r?\n a\nb a b
Удалить комментарий // //.*$ « x=1;//note x=1;
Формат даты (\d{4})/(\d{2})/(\d{2}) ${1}-${2}-${3} 2025/10/30 2025-10-30
Удалить повтор строк ^(.*)(\r?\n\1)+$ ${1} дубликаты одна строка

Итог

Регулярные выражения — мощный инструмент, применимый во многих средах.
Используйте приведённые шаблоны для анализа логов, фильтрации данных и автоматизации текстовых задач.