Почему регулярные выражения трудно учить
Регулярные выражения (Regex) похожи на «инопланетный язык» — последовательность символов, от которого кружится голова. Но их способность обрабатывать текст незаменима: проверка email, извлечение данных, массовая замена — несколько строк регулярного выражения заменяют десятки строк кода. Главное — освоить часто используемые шаблоны; достаточно уметь их найти, когда нужно, а не заучивать всё наизусть.
Шпаргалка по частым шаблонам regex
Проверка
| Назначение | Шаблон regex |
|---|---|
| ^[\w.-]+@[\w.-]+.\w+$ | |
| Номер мобильного (материковый Китай) | ^1[3-9]\d{9}$ |
| URL | ^https?://[\w.-]+(:\d+)?(/.*)?$ |
| Номер удостоверения (18 знаков) | ^\d{17}[\dXx]$ |
| IP-адрес | ^(\d{1,3}.){3}\d{1,3}$ |
Извлечение
| Назначение | Шаблон regex |
|---|---|
| Извлечь все числа | \d+ |
| Извлечь содержимое HTML-тегов | <(tag)>(.*?)</\1> |
| Извлечь ссылки | https?://[\w./?=&%-]+ |
| Извлечь китайские символы | [\u4e00-\u9fa5]+ |
Замена
| Назначение | Regex → замена |
|---|---|
| Удалить пустые строки | Последовательные переносы + пробелы → один перенос |
| Маскировка телефона | Замена четырех цифр в середине на **** |
| camelCase в snake_case | Добавить подчеркивание перед заглавными буквами |
Инструмент тестирования regex от DocsAll
Используйте инструмент тестирования regex для отладки в реальном времени:
- Откройте инструмент тестирования regex
- Введите регулярное выражение и выберите флаги (g глобальный, i без учета регистра, m многострочный)
- Вставьте тестовый текст
- Просматривайте совпадения с подсветкой в реальном времени
Писать и тут же тестировать гораздо эффективнее, чем писать регулярное выражение вслепую. Основы regex см. в руководстве по регулярным выражениям.
Шпаргалка по частым метасимволам
- . любой символ (кроме переноса строки)
- \d цифра, \w буква/цифра/подчеркивание, \s пробельный символ
- ^ начало строки, $ конец строки
- * 0 или более раз, + 1 или более раз, ? 0 или 1 раз
- {n,m} от n до m раз
- [] набор символов, () группа, | или
Советы по отладке
Тестируйте по частям
Пишите сложное регулярное выражение по частям; тестируйте после каждой добавленной части — так проще локализовать проблему.
Используйте ленивый поиск
Жадный поиск захватывает слишком много; ленивый (добавьте ? к квантификатору) захватывает минимум и часто применяется при извлечении содержимого.
Внимание к экранированию
Чтобы сопоставить сами метасимволы ., *, ?, экранируйте их обратной косой чертой, например для точки используйте .
Не полагайтесь чрезмерно на regex
Разбор сложного HTML/JSON с помощью regex часто ведет к ошибкам; используйте парсер, когда это уместно. Regex подходит для сопоставления текста с четкими правилами.
Рекомендация
Соберите свои часто используемые шаблоны regex в собственную шпаргалку; при необходимости просто скопируйте и подправьте. С проверкой в реальном времени через инструмент тестирования regex не так уж сложен.