Главная PHP Скрипты UCOZ Joomla jQuery CSS WordPress Урок 14. Регулярные заявки. - Форум Регистрация Вход
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Урок 14. Регулярные заявки.
eXeSДата: Суббота, 07.11.2009, 15:28 | Сообщение # 1
Легенда
Группа: Администраторы
Сообщений: 273
Репутация: 120
Статус: Offline
Этот урок немного не вписывается в логическую цепь наших занятий, а был создан "под давлением общественности", то есть по просьбам читателей, и будет посвящен регулярным выражениям и функциям работы с ними. Наверное, мои расчеты, что статьи Александра Грималовского "Регулярные выражения" будет достаточно для понимания этой темы, оказались неверны.

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

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


Функции работы с регулярными выражениями.
Необходимо сказать, что PHP располагает как собственным механизмом работы с регулярными выражениями (POSIX), так и заимствованным у другого серверного языка программирования Perl. Внешне их легко различить по названиям функций: функции первого типа начинаются с символов "ereg", а второго - "preg".

Но названия функций не единственное их отличие. Прежде всего они содержат некоторые различия в синтаксисе регулярных выражений. Так, Perl-подобные функии требуют разделители: $str = "регулярное выражение"; // просто строка
$preg = preg_replace("/р.+е/i", "<i>[вырезано]</i>", $str);
$ereg = eregi_replace("р.+е", "<i>[вырезано]</i>", $str);
echo $preg."<br>".$ereg;

Как видите, мы используем функции замены части строки с помощью регулярных выражений. Обратите внимание на шаблон функции preg_replace: в качестве разделителя здесь выступают слеши, причем после закрывающего разделителя следует модификатор i, указывающий, что шаблон является нечувствительным к регистру. Тот же эффект достигается при использовании POSIX функции с суффиксом i (eregi_replace).
Результат выполнения этих функций одинаков:

[вырезано]
[вырезано]

Функция preg_replace в нашем примере проявила так называемую "жадность", и охватила всю строку, которая начинается с буквы "р" и заканчивается "е". Заставить функцию не "жадничать" помогает модификатор U. В этом случае результат ее выполнения будет:

[вырезано] вы[вырезано]ние

Функция нашла минимальное расстояние между буквами "р" и "е" и заменило его указанной строкой.

Функция eregi_replace также проявила "жадность", но изменить этот порядок уже нельзя, так как в POSIX-функциях не предусмотрено использование модификаторов.

Бегло рассмотрим и другие функции работы с регулярными выражениями.
ereg, eregi, preg_match функция(pattern, string, [regs]) Ищет в строке string соответствия с регулярным выражением pattern, и сохраняет их в массиве regs (если указано).
preg_match_all preg_match_all(pattern, subject, matches, [order]) Осуществляет глобальное сопоставление с шаблоном, результаты заносит в matches.

split, spliti, preg_split функция(pattern, string, [limit]) Разбивает строку в массив посредством регулярного выражения.
preg_grep preg_grep(pattern, input) Возвращает массив из элементов массива input, соответствующих шаблону pattern.

Примеры на регулярные выражения.
Перевод времени в стандартное время Unix.

Предположим, у нас в базе данных или в другом источнике хранится дата в следующем формате:
часы:минуты:секунды - день.месяц.год
Но по некоторым причинам (например, произведен редизайн сайта) нам понадобилось отображать дату в следующем виде:
день.месяц.год часы:минуты

Как вы понимаете, вручную заниматься этим - сумасшествие, так что напишем сценарий, который будет на первом этапе приводить дату к виду часы:минуты:секунды месяц/день/год, а затем с помощью функции strtotime() переведить эту запись в стандартное время UNIX, которое мы сможем отображать, как захочется.

Самое интересное - первый этап. Он-то нас и интересует в плане использования регулярных выражений.
$str = "12:57:43 - 10.03.02"; // $str содержит некоторую дату
$str = preg_replace("!(\d{2})\.(\d{2})\.(\d{2})!", "\\2/\\1/\\3", $str);

С помощью регулярного выражения мы изменяем формат записи дня, месяца и года, причем каждый этот элемент обособляем скобками. Во втором параметре функции мы ссылаемся на найденные соответствия в скобках. Вот как это происходит:
\\0 - содержит строку, соответствующую всему шаблону (в нашем примере "10.03.02").
\\1 - содержит символы, соответствующие только первому элементу, заключенному в скобки (то есть "10").
\\2 - содержит символы, соответствующие только второму элементу, заключенному в скобки (то есть "03").
и так далее.

На этом этапе мы получем дату "12:57:43 - 03/10/02". Теперь доводим это до конца.
$str = str_replace("-", "", $str); // вырезаем знак "-"
$time = strtotime($str);

Теперь можно использовать переменную $time, как заблагорассудится.
На этом и закончим наш урок. Встретимся на следующем!

Прикрепления: 8313326.jpg (255.8 Kb)
 
  • Страница 1 из 1
  • 1
Поиск:

Партнеры Инф. о пользователях сайта: Статистика сайта
Барселона-фк.Ру

  • EXES - Администратор
  • timyrkz - Администратор
  • kr1d - Проверенный(Бывший Адимнистратор)
  • Rambler's Top100

     Все права защищены. © 2026
    Хостинг от uCoz