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

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

Основы регулярных выражений, базовый синтаксис и использование, разновидности регулярных выражений в 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» определяет поиск любой цифры;
  • альтернативные последовательности разделяются символом ‘|’, но внутри класса это будет обычный символ. Например, \лес|лис\ соответствует и «лис» и «лес»;
  • внутри регулярного выражения можно указывать «подшаблоны» заключая их в круглые скобки. Поясню на примере. Шаблон «пар(оход|овоз)» совпадает с каждым из слов «паровоз», «пароход» и «пар», а без подшаблона такого результата достичь сложнее. Подшаблоны для доступа к ним нумеруются по мере появления;
  • флаги, указываются в конце шаблона, дают указания по виду поиска, например, игнорировать регистр символа.

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