Разработка сайтов, создание сайтов
главная / PHP / Регулярные выражения в языке PHP. Подробно о регулярных выражениях.

Регулярные выражения в языке PHP. Подробно о регулярных выражениях.

Регулярные выражения (англ. regular expressions) являются инструментом для работы с текстом. С помощью него производятся такие действия со строками как поиск, проверка, извлечение и изменение подстрок. Основными понятиями, входящими в структуру регулярных выражений является строка и шаблон.

Под строкой в регулярных выражениях понимается такой текст или фрагмент текста, который подвергается обработке составленными программистом шаблонами.

Разберём что же такое шаблон. Шаблон задаёт критерий поиска для текста или отдельных его фрагментов, находя для нас всё необходимое для последующей работы и отбрасывая всё ненужное. Критериями поиска для шаблонов служат различные символы, такие как буквы (a-z, A-Z) и цифры (0-9), указывающие на определенные значения для поиска, а также специальные символы (-, *, ?), при помощи которых указывается диапазон различных условий.

Приведем пример использования критериев в шаблоне. Нам необходимо найти в тексте цифры 6 или 9, либо букву z. Что мы будем делать? Всё достаточно просто. Надо всего лишь указать в шаблоне такое условие [69z].

Символ вертикальной черты «|» может быть использован в том случае, когда необходимо выбрать одно условие из нескольких уже известных.

Символ «^» применяется в двух случаях. Если «^» ставится внутри квадратных скобок перед условием для поиска, то происходит его отрицание. «[^0-9]» – при таком условии будет находиться любой символ, кроме указанных цифр. В случае когда требуется указать, что строка будет начинаться с определенных символов, знак «^» ставится перед квадратными скобками. «^[a-z]» – условие, при котором первой буквой в строке обязательно должна быть малая латинская буква.

Если критерием для поиска является определенный символ в конце строки, то используется знак «$». «[0-9]$» – последним символом в строке будет цифра от 0 до 9.

Знак «+» ставится после символа в условии для поиска и означает, что тот символ, после которого стоит знак, может встретиться в строке как минимум один раз.

Знак «*» ставится, если символ после которого он стоит, может либо не встретиться ниразу, либо встретиться неизвестное количество раз.

Символ, после которого стоит знак «?», может встретиться в строке один раз либо не встретиться ниразу.

Фигурные скобки «{}». Если после какого-либо символа стоят фигурные скобки с числом внутри, то они будут называться границами, которые будут показывать какое количество раз подряд будет повторяться символ, стоящий перед фигурными скобками. «z{5}» – условие, при котором буква «z» будет повторяться пять раз подряд. Если нужно указать, что буква «z» может повториться не менее пяти раз, но неизвестно максимальное количество повторений, то после числа «5» ставится запятая «z{5,}». В случае когда известно минимальное и максимальное количество повторений, до и после запятой ставятся цифры, указывающие эти значения «z{5, 7}». Если возникает ситуация когда необходимо указать, что такое повторение будут проходить несколько символов, то они попросту заключаются в круглые скобки. «(xz){2}» – пример условия, при котором символы «xz» будут повторяться в строке два раза подряд.

Ещё одним применением круглых скобок «()» является ситуация, когда можно смело утверждать, что за указанной строкой в скобках будет стоять строка, стоящая после них. «(МОЁ)*ПЕЧЕНЬЕ!» – таким образом найденый результат может быть таким – «ПЕЧЕНЬЕ» или таким – «МОЁ ПЕЧЕНЬЕ» и тому подобное.

Символ «» позволяет использовать специальные символы в шаблоне для поиска в строках. «*» – условие, при котором необходимо найти символ «*» в строке. При необходимости найти в строке сам знак «» перед ним также ставится «» – «».

Бывают такие случаи, что необходимо найти в строке минус. Как поступить в такой ситуации? Ведь он также одновременно является и диапазоном условий для поиска. Рассмотрим пример. В тексте необходимо найти буквы в диапазоне от d до f, а также минус. Если поставить знак «-» между буквами, данный символ будет использован как диапазон для поиска. А если этот знак поставить сразу же после квадратной скобки, то функция будет его воспринимать как тот символ, который необходимо найти тексте. В шаблоне данное условие будет выглядеть так [-, d-f].

Также нельзя забывать о таких возможностях регулярных выражений как ограничители и модификаторы. В роли ограничителей выступают два прямых слеша, стоящих до и после искомого слова – «/печенье/». Модификаторы служат для уточнения условий поиска в регулярных выражениях. Модификаторами являются «i», который игнорирует регистры при поиске, а также модификатор «x», который игнорирует уже пробельные символы.

Использование классов символов може облегчить как ваш труд так и сам код. Примером может послужить условие, при котором могут использоваться все буквы латинского языка и цифры. Чтобы не прописывать каждый из критериев по отдельности достаточно указать в квадратных скобках [:alnum:]]. Вот весь список классов символов:

  • [[:alnum:]] – буквенно-цифровые символы
  • [[:digit:]] – десятичные цифровые символы
  • [[:xdigit:]] – шестнадцатеричные цифровые символы
  • [[:alpha:]] – буквенные символы
  • [[:upper:]] – прописные буквенные символы
  • [[:lower:]] – строчные буквенные символы
  • [[:punct:]] – знаки пунктуации
  • [[:space:]] – символы пробела
  • [[:blanc:]] – символы табуляции и пробела
  • [[:print:]] – печатные символы
  • [[:cntrl:]] – управляющие символы
  • [[:graph:]] – печатные символы, за исключением пробельные

Теперь разобравшись в теоретических основах регулярных выражений, можно перейти к практическим.

В PHP поддерживается два стандарта регулярных выражений. Первым является POSIX, функции которого на данный момент можно назвать устравшими и медленными. Второй стандарт, пришедший на смену POSIX’у – PCRE. О нем и пойдет речь дальше.

Для начала нужно определиться какого результата мы хотим добиться, используя регулярные выражения в коде. При поиске совпадения содержимого строки с условием, указанным в шаблоне, используется функция preg_match () (в стандарте POSIX эта функция пишется так – ereg (), либо eregi (), если необходимо игнорировать регистр). Используя эту функцию, шаблон обращается к указанной строке, в которой необходимо найти нужное условие, запускается механизм регулярных выражений для поиска совпадений и каким бы не был результат, положительным либо отрицательным, возвращает полученные данные в массив.

Разберём на небольшом примере. Допустим, что необходимо узнать присутствует ли в фразе «Кто съел моё печенье?» слово «печенье». Функция preg_match () выполняет эту задачу обычным перебором символов. Беря первый символ в строке, он сравнивает его с первым символом в условии «п», указанном в шаблоне. Если символы не совпадают, то функция уже сравнивает следующий символ в строке всё с тем же символом в условии. Если символы совпали, то уже сравниваются последующий символ в строке со вторым символом «е» в условии. Перебрав все символы и найдя в нём необходимое условие, функция выдаёт в массив положительный результат, или, наоборот, если не было найдено в строке необходимое условие, то в массив возвращается уже отрицательное значение.

Какие ещё существуют функции, которыми Вы можете воспользоваться при работе с регулярными выражениями? Для замены искомого значения в строке на указанное в значение в условии используется в функция preg_replace () (ereg_replace (), eregi_replace () для POSIX). Функция preg_split () (split () и spliti () для POSIX) используется для разбиения строки в соответствии с условием, указанным в шаблоне.



Источник: globusdev.ru
текущее:

НОВОСТИ

2011 г., «VisMech.ru»