НЕ МОЛЧИ!!!    Сделай что-нибудь,
чтобы остановить войну России в Украине.
...бойтесь людей равнодушных - именно с их молчаливого согласия происходят все самые ужасные преступления на свете.   ("Репортаж с петлёй на шее")

Введение в регулярные выражения

Вводная статья о регулярных выражениях, приведены основы синтаксиса, использование и разновидности регулярных выражений в PHP.

Содержание

  • Что такое регулярные выражения
  • Область применения
  • Разновидности регулярных выражений
  • Основные понятия
  • Основы синтаксиса регулярных выражений

Что такое регулярные выражения

Регулярные выражения – это механизм для поиска последовательностей символов в тексте. В выражениях используется свой язык описания(представления) этой последовательности. Проще говоря регулярные выражения — это мощный инструмент для разнообразных манипуляций с текстом.
Непосвященному строка регулярных выражений может показаться абракадаброй, это нормально. Приложив немного усилий, вы научитесь их понимать и овладеете их мощью. На 100% не обещаю, т.к. его возможности огромны, процент освоения будет зависеть от вашей настойчивости и терпения.
И последнее. Построение шаблонов регулярных выражений настолько гибко, что сложно привести строгое описание его построения. Поэтому будем учиться методом постепенного погружения в эти самые регулярные выражения. В статье вы познакомитесь с основными терминами и основами синтаксиса. А в конце текста даны ссылки на справочные данные по основным элементам языка описания шаблонов и примеры регулярных выражений для дальнейшего освоения материала.

Область применения

В IT регулярные выражения используются в различных языках программирования, скриптах и интегрированных средах, текстовых редакторах, компиляторах и утилитах для поиска, анализа и различного преобразования текстов.
Может возникнуть вопрос, чем регулярные выражения лучше обычного поиска? Этот инструмент очень эффективен, в случае нечеткого поиска, говоря образно, когда надо найти «то, не знаю, что». Например, найдите в длинном тексте всевозможные варианты простого слова «вода» — «водный», «водяной», «подводный» и т.п. С помощью регулярных выражений вы с этой задачей легко справитесь.

Разновидности регулярных выражений

Как всякий полезный инструмент, регулярные выражения обросли множеством различных дополнений, диалектов и направлений. Я остановлюсь на их использовании в серверных скриптах.
Существует два основных стандарта регулярных выражений – POSIX и PCRE.
POSIX(portable operating system interface for Unix) – в настоящее время считается устаревшим, но поддерживается большинством скриптов и языков программирования.
PCRE(Perl Compatible Regular Expressions) – данный стандарт превосходит предыдущий по своим возможностям и скорости работы. Он встроен в ядро Perl, откуда очевидно и начал победное шествие. Впрочем, в ядро PHP он также встроен.
Оба варианта во многом похожи. В более продвинутом, например, добавлены специальные символы и параметры, упрощающие шаблон и делающие поиск более гибким. Другие диалекты в основном дополняют стандарты дополнительными возможностями, но и базовые настолько широки, что я сомневаюсь, что вы будете их использовать на 100%. Смело осваивайте этот инструмент в любом виде, отличия незначительные.

Основные понятия

Основа регулярных выражений — это построение строки поиска(шаблона) с помощью специального языка, куда входят:

  • наборы символов;
  • метасимволов;
  • различные параметры поиска.

В простейшем случае в шаблоне указывают набор обычных или специальных символов, которые потом ищутся в тексте на совпадение. Когда нужно найти, например, несколько вариантов набора символов, или привязать шаблон поиска к началу или концу слова дополнительно используют специальные символы(метасимволы) и управляющие параметры. Все просто, сложность лишь в том, чтобы знать правила их использования. Основные термины и правила построения шаблонов и будут приведены в статье.
Никто не хочет слыть консерватором, ваш покорный слуга в том числе, поэтому в последующем материале будем придерживаться стандарта PCRE.
Итак, начнем с базовых понятий.
Подшаблон () часть строки поиска, выделенная скобками (), называется подшаблоном и используется для выделения этой группы с целью дальнейшей обработки.
Метасимволы — это специальные символы, которые используются для обозначения групп символов, невидимых символов, управления режимом поиска, например, «.», «^», «$», «*» и т.д.
Класс[], в шаблоне регулярных выражений может встречаться группа символов(или весь шаблон) в квадратных скобках — это класс. Он позволяет найти подстроку с любым из символов, перечисленных в классе. Например, с помощью шаблона «л[еи]с» будут найдены слова «лес» и «лис».
Квантификатор {} регулярного выражения определяет количество повторений предшествующего ему набора символов в шаблоне. Указывается в фигурных скобках после перечня символов. Может быть использован для одиночного символа, символьного класса, метасимвола «.», подшаблона и обратной ссылки. Для наиболее употребительных значений количества повторений используются свои метасимволы, которые употребляются без фигурных скобок.
Якорь регулярного выражения — это специальный символ, указывающий, в какой части текста или строки искать подстроку шаблона. Например, по шаблону /^ab/ могут быть найдены строки, начинающиеся с сочетания «аб».

Основы синтаксиса регулярных выражений

При формировании шаблона в регулярных выражениях используются следующие соглашения:

  • шаблон поиска всегда представляет собой строку, отделяемую специальным символом, общепринято использовать для этого обратный слеш «\», например, \шаблон_поиска\;
  • шаблоном может выступать обычный символ или набор символов;
  • после закрывающего шаблон обратного слеша может быть указан необязательный список модификаторов поиска. Например, шаблон \абракадабра\/m позволит найти подстроку «абракадабра» во всех строках текста;
  • набор символов, заключенный в квадратные скобки позволяет найти слова с любым символом из набора. Например, по шаблону [мир] будут найдены мир, рим, мировоззрение и т.п. В скобках можно указывать через дефис диапазон символов, например, [а-в];
  • чтобы использовать метасимвол в качестве обычного символа шаблона его предваряют обратным слешем. Пример использовании точки «.» в шаблоне — [program\.exe];
  • если обратный слеш в шаблоне ставится перед обычным символом, он превращает его в метасимвол. Например, шаблон «\d» определяет поиск любой цифры;
  • альтернативные последовательности разделяются символом ‘|’, но внутри класса это будет обычный символ. Например, \лес|лис\ соответствует и «лис» и «лес»;
  • внутри регулярного выражения можно указывать «подшаблоны» заключая их в круглые скобки. Наример, шаблон «пар(оход|овоз)» совпадает с каждым из слов «паровоз», «пароход» и «пар». Подшаблоны для доступа к ним нумеруются по мере появления;
  • флаги, указываются в конце шаблона, дают указания по виду поиска, например, игнорировать регистр символа.

На этом достаточно для введения в регулярные выражения. Далее в статье Справочник по регулярным выражениям будут приведены данные, достаточные для изощренного использования регулярных выражений. Вы также можете закрепить полученные сведения на примерах регулярных выражений.