15 регулярок для Sublime на все случаи жизни.
Пятилетний ребенок разберется, как через поисковое окошко найти в тексте комбинацию цифр «1999» или «1800». А вот как найти все комбинации из четырех цифр идущих подряд? Или все номера телефонов? Или фрагменты текста внутри html-тегов?
Для решения подобных задач (и не только их) несколько десятилетий назад были придуманы регулярные выражения (Regular Expression). Это универсальная система описания текстовых строк, которая применяется в разных приложениях и языках программирования.
На синтаксисе регулярных выражений останавливаться не будем, а сразу перейдем к практике. А когда вы войдете во вкус, расскажем как расширить свой кругозор в этой теме.
В во всех примерах мы будем использовать Sublime Text. Скачать его установочный файл можно на официальном сайте приложения. При желании можно использовать другой текстовый редактор (список программ с поддержкой регулярных выражений есть в конце статьи).
- 1. Годы
- 2. Годы с 1900 по 2099
- 3. Ссылки
- 4. Адреса электронной почты
- 5. Номера телефонов
- 6. Почтовые индексы
- 7. IP-адреса (IPv4)
- 8. Содержимое html-тегов
- 9. Значения атрибутов html-тегов
- 10. Имя+Фамилия
- 11. Римские цифры
- 12. Широта/Долгота
- 13. Время
- 14. Даты
- 15. Числа с десятичными дробями
- Альтернативы
- Полезные веб-сервисы
- Для тех, кто хочет узнать больше
1. Годы
[code]
bd{4}b
[/code]
Итак, у нас есть окно редактора, в котором есть исходный текст и регулярное выражение. Нам нужно сделать следующее:
- 1. Нажать Command+F;
- 2. Сделать активной кнопку .* в левом нижнем углу;
- 3. Вставить регулярное выражение в поисковое окошко и нажать на кнопку Find All;
- 4. Нажать Command+C;
- 5. Нажать Command+N или выбрать нужный документ;
- 6. Нажать Command+V и радоваться результату.
В остальных 14 примерах надо делать тоже самое.
2. Годы с 1900 по 2099
[code]
b(19|20)d{2}b
[/code]
3. Ссылки
[code]
(http|ftp|https)://([w_-]+(?:(?:.[w_-]+)+))([w.,@?^=%&:/~+#-]*[[email protected]?^=%&/~+#-])?
[/code]
4. Адреса электронной почты
[code]
b[A-Z0-9._%+-][email protected][A-Z0-9.-]+.[A-Z]{2,}b
[/code]
5. Номера телефонов
[code]
((8|+7)[- ]?)?((?d{3})?[- ]?)?[d- ]{7,10}
[/code]
6. Почтовые индексы
[code]
bd{6}b
[/code]
7. IP-адреса (IPv4)
[code]
(?:[0-9]{1,3}.){3}[0-9]{1,3}
[/code]
8. Содержимое html-тегов
[code]
<h3>(.*?)</h3>
[/code]
9. Значения атрибутов html-тегов
[code]
title=["’]?((?:.(?!["’]?s+(?:S+)=|[>"’]))+.)["’]?
[/code]
10. Имя+Фамилия
[code]
[А-ЯЁ][а-яё]+ [А-ЯЁ][а-яё]+
[/code]
11. Римские цифры
[code]
[MDCLXVI]+
[/code]
12. Широта/Долгота
[code]
-?[0-9]{1,3}(?:.[0-9]{1,10})?
[/code]
13. Время
[code]
([0-9]|0[0-9]|1[0-9]|2[0-3]):[0-5][0-9]
[/code]
14. Даты
В форматах дд/мм/гггг,дд-мм-гггг или дд.мм.гггг.
[code]
(?:(?:31(/|-|.)(?:0?[13578]|1[02]))1|(?:(?:29|30)(/|-|.)(?:0?[1,3-9]|1[0-2])2))(?:(?:1[6-9]|[2-9]d)?d{2})$|^(?:29(/|-|.)0?23(?:(?:(?:1[6-9]|[2-9]d)?(?:0[48]|[2468][048]|[13579][26])|(?:(?:16|[2468][048]|[3579][26])00))))$|^(?:0?[1-9]|1d|2[0-8])(/|-|.)(?:(?:0?[1-9])|(?:1[0-2]))4(?:(?:1[6-9]|[2-9]d)?d{2})
[/code]
15. Числа с десятичными дробями
С разделителем запятой:
[code]
[-+]?[0-9]*,?[0-9]+
[/code]
С разделителем точкой:
[code]
[-+]?[0-9]*.?[0-9]+
[/code]
Альтернативы
Естественно, на Sublime Text свет клином не сошелся и есть и другие текстовые редакторы с поддержкой регулярных выражений. Скорее всего, как минимум, с несколькими из них вы в определенной степени знакомы:
- Atom;
- BBEdit;
- Brief;
- Elvis;
- Emacs;
- BBEdit;
- Brief;
- Coda;
- Elvis;
- Emacs;
- Microsoft Word;
- NEdit;
- Notepad++;
- NoteTab;
- Nvi;
- PSPad;
- SubEthaEdit;
- TextMate;
- TSE;
- UltraEdit;
- Vile;
- Vim.
Полезные веб-сервисы
На regexr.com можно протестировать регулярные выражения и узнать что обозначают их отдельные синтаксические элементы. Также на этом сайте теоретическая информация по теме.
По моему опыту, люди, которые не знакомы с регулярными выражениями, чаще всего сталкиваются с проблемой, описанной в четвертом пункте этой статьи. Для ее решения можно не заморачиваться, а использовать онлайн-сервис для извлечения email-адресов из текста
Для тех, кто хочет узнать больше
В статье Мой ТОП-9 книг для программистов я упоминала книгу «Регулярные выражения. Сборник рецептов». В ней можно найти много готовых практических примеров, но она не сделает вас «богом регулярок». Для этого понадобится литература посерьезнее.
Авторитетные люди по всему миру рекомендует для глубокого и тонкого понимания этой темы прочитать ставшую классикой книгу Джеффри Фридла «Регулярные выражения».
Но для начала можно пройти онлайн-курс на regexone:
Источник: