Сами регулярные выражения не являются новинкой, превнесенной PHP. В том или ином виде они используются уже достаточно большой срок и являются очень мощным механизмом работы со строковыми данными.
Регулярное выражение представляет из себя некий шаблон, который используется для различных действий в зависимости от функции, использующей это регулярное выражение. Для задания шаблона используются специальные символы.
Ниже представлена краткая таблица специальных символов и их значений.
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Необходимо сказать, что PHP располагает как собственным механизмом работы с регулярными выражениями (POSIX), так и заимствованным у другого серверного языка программирования Perl. Внешне их легко различить по названиям функций: функции первого типа начинаются с символов "ereg", а второго - "preg". Если Вам нужен дешевый хостинг для проектов любой сложности то такой хостинг можно найти только на сайте TvoyHosting.com
Но названия функций не единственное их отличие. Прежде всего они содержат некоторые различия в синтаксисе регулярных выражений. Так, Perl-подобные функии требуют разделители:
|
$str = "регулярное выражение"; // просто строка $preg = preg_replace("/р.+е/i", "<i>[вырезано]</i>", $str); $ereg = eregi_replace("р.+е", "<i>[вырезано]</i>", $str); echo $preg."<br>".$ereg; |
Как видите, мы используем функции замены части строки с помощью регулярных выражений. Обратите внимание на шаблон функции preg_replace : в качестве разделителя здесь выступают слеши, причем после закрывающего разделителя следует модификатор i , указывающий, что шаблон является нечувствительным к регистру. Тот же эффект достигается при использовании POSIX функции с суффиксом i ( ereg i _replace ).
Результат выполнения этих функций одинаков:
[вырезано]
[вырезано]
Функция preg_replace в нашем примере проявила так называемую "жадность", и охватила всю строку, которая начинается с буквы "р" и заканчивается "е". Заставить функцию не "жадничать" помогает модификатор U . В этом случае результат ее выполнения будет:
[вырезано] вы [вырезано] ние
Функция нашла минимальное расстояние между буквами "р" и "е" и заменило его указанной строкой.
Функция eregi_replace также проявила "жадность", но изменить этот порядок уже нельзя, так как в POSIX-функциях не предусмотрено использование модификаторов.
Бегло рассмотрим и другие функции работы с регулярными выражениями.
|
Предположим, у нас в базе данных или в другом источнике хранится дата в следующем формате:
часы:минуты:секунды - день.месяц.год
Но по некоторым причинам (например, произведен редизайн сайта) нам понадобилось отображать дату в следующем виде:
день.месяц.год часы:минуты
Как вы понимаете, вручную заниматься этим - сумасшествие, так что напишем сценарий, который будет на первом этапе приводить дату к виду часы:минуты:секунды месяц/день/год , а затем с помощью функции strtotime() переведить эту запись в стандартное время UNIX, которое мы сможем отображать, как захочется.
Самое интересное - первый этап. Он-то нас и интересует в плане использования регулярных выражений.
|
$str = "12:57:43 - 10.03.02"; // $str содержит некоторую дату $str = preg_replace("!(\d{2})\.(\d{2})\.(\d{2})!", "\2/\1/\3", $str); |
С помощью регулярного выражения мы изменяем формат записи дня, месяца и года, причем каждый этот элемент обособляем скобками. Во втором параметре функции мы ссылаемся на найденные соответствия в скобках. Вот как это происходит:
На этом этапе мы получем дату "12:57:43 - 03/10/02". Теперь доводим это до конца.
|
$str = str_replace("-", "", $str); // вырезаем знак "-" $time = strtotime($str); |
Теперь можно использовать переменную $time, как заблагорассудится.
На этом и закончим наш урок. Встретимся на следующем!
