Регулярные выражения - формальный язык поиска и осуществления манипуляций с подстроками в тексте, основанный на использовании метасимволов. Для поиска используется строка-образец, по-русски её часто называют «шаблоном», «маской»), состоящая из символов и метасимволов и задающая правило поиска. Для манипуляций с текстом дополнительно задаётся строка замены, которая также может содержать в себе специальные символы. Википедия
Примеры использования:
- Извлечение email из теста.
- Извлечение атрибутов тегов из HTML (данный метод не является надежным так как структура тегов HTML может быть выражена по-разному, что приведет к усложнению регулярного выражения).
- Извлекать IP из интернет-сайтов.
- Извлечь результаты URL.
- Проводить замену по регулярному выражению (один из примеров регулярного выражения, удаляющего внешние ссылки на сайте можно посмотреть здесь).
Но как бы не был хорошо способ получения значений телефоном, email, url, IP адресов и т.д. из текстовой информации, не стоит забывать что составить регулярное выражение для сложной выборки, также будет сложно.
Хорошая фраза присутствует на Bash.im - Цитатник Рунета
Некоторым программистам, когда они сталкиваются с какой-то проблемой, приходит в голову такая мысль
— О, я знаю! Это можно сделать с помощью регулярных выражений!
Это означает, что у этого программиста теперь ДВЕ проблемы.
https://bash.im/quote/401148
Описывать метасимволы и правила составления регулярных выражений я не буду, этого достаточно присутствует на просторах интернета. Перейдем сразу к примерам, которые могу пригодиться при обработки текстовой информации.
Соответствие имени пользователя
/^[a-z0-9_-]{3,16}$/
Данному выражению соответствует строка от 3х до 16 символов, которые могут быть: строчная буква (a-z), заглавные буквы(A-Z), число (0-9), подчеркивание или дефис.
Соответствие паролю
/^[A-Za-z0-9_-]{6,18}$/
Выражение похоже на предыдущее отличием является - количество символов от 6 до 18 и присутствие заглавных букв A-Z. В данное выражение также можно добавить спец символы, для проверки более сложных паролей.
Соответствие цвету CSS
/^#?([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$/
Выражение состоит из 2х частей для проверки цветов вида #FAFAFA и #FFF. Каждая часть похожа на проверку имени пользователя. Отличие заключается в том, что могут быть использованы символы алфавита от A до F, как строчные так и заглавные.
Соответствие электронной почты
/^([a-z0-9_\.-]+)@([\da-z\.-]+)\.([a-z\.]{2,6})$/
По сути выражение состоит из 3х частей. Часть до символа @, может включать в себя: строчная буква (a-z), число (0-9), подчеркивание, дефис или точка. Вторая часть до домена верхнего уровня включает в себя: строчная буква (a-z), число (0-9), дефис или точка. И сам домен верхнего уровня может состоять из строчных букв от 2 до 6 символов. Здесь нужно помнить что везде используются только строчные буквы, поэтому следует привести весь текст к нижнему регистру или добавить в проверку заглавные буквы.
Соответствие URL
/^(https?:\/\/)?([\da-z\.-]+)\.([a-z\.]{2,6})([\/\w \.-]*)*\/?$/
Первый блок проверка протокола, который может и не присутствовать в URL. Далее 2 блока отвечающего за доменное имя, данная часть похожа на поверку доменного имени в email. Далее сам адрес на сайте.
Соответствие тегу HTML
/^<([a-z]+)([^<]+)*(?:>(.*)<\/\1>|\s+\/>)$/
Первый блок название тега, далее атрибуты тега которые не должны содержать символ <. После это идет закрытие части с атрибутами, текст и закрытие самого тега. Но есть еще и одинарные теги, за это отвечает вторая группа которая ищет атрибуты тега и его закрытие \s+\/>.
Выводы
Регулярные выражения хороши, но их использование требует хорошей подготовки и не всегда может привести к тому результату, который ожидаешь. Так как обрабатываемая текстовая информация в большинстве случаев не идеальна. Да и фраза с Bash.im актуальна всегда.
В данный момент для проверок email, IP, URL, MAC-адрес, домен рекомендуется использовать функцию filter_var.
Вы также можете посмотреть работу регулярных выражений с помощью сервиса визуализации.
З.Ы. А еще мы пишем много полезной информации в блоге Стократ. Добро пожаловать.
З.З.Ы. Не забывайте ставить лайки и писать комментарии если тема Вам интересна, и вы хотите продолжения.