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