Меню сайта
Категории раздела
HTML [44] |
Visual C++ и MFC [21] |
c++ [78] |
php [19] |
Javascript [15] |
C# [51] |
загрузки [0] |
XNA
[10]
создание игр с помощью xna
|
Наш опрос
Друзья сайта
Статистика
Онлайн всего: 3
Гостей: 3
Пользователей: 0
Реклама
Главная » Статьи » php |
Урок 14
Итак, надеясь, что вы уже прочитали вышеуказанную статью, начинаем сегодняшний урок. Сами регулярные выражения не являются новинкой, превнесенной PHP. В том или ином виде они используются уже достаточно большой срок и являются очень мощным механизмом работы со строковыми данными. Регулярное выражение представляет из себя некий шаблон, который используется для различных действий в зависимости от функции, использующей это регулярное выражение. Для задания шаблона используются специальные символы. Ниже представлена краткая таблица специальных символов и их значений.Символы Значение Примеры Символы, указывающие расположение искомого элемента в строке. ^ Указывает на то, что символы после знака должны находиться в начале строки. ^заголовок $ Символы до знака должны находиться в конце строки. содержание$ Escape последовательности. \. Шаблону соответствует знак точки в строке. Смеркалось\. \n Символ перевода строки. Строка\nЕще строка \r Символ возврата каретки. Текст\r \t Символ табуляции. \tКрасная строка \v Символ вертикальной табуляции. \vнекоторый текст Задание группы символов. [ ] Задают группу символов. Соответствует любому символу из перечисленных в группе. Есть возможность задания диапазона символов с помощью знака - (минус, тире). [а-яa-z_123] ^ В группе символов соответствует отрицанию последующих символов, то есть указывает символы, не соответствующие шаблону. [^\n\t] . Соответствует любому символу, кроме перевода строки. .оза Количественные показатели * Символ перед знаком не присутствует либо повторяется любое число раз. текст\n*дальше текст ? Символ перед знаком встречается ноль или один раз. длинн?ое + Предыдующий символ повторяется один или большее число раз. 100+ {n} Символ перед знаком повторяется n-ое число раз. длин{2}оше{3} {min,max} Задает диапазон числа повторений предыдущего символа. ^ab{3,7} {min,} Предыдущий символ повторяется min или большее число раз. слово.{5,} Логическое определение. | Эффект подобен оператору || (OR) в логическом выражении. раз|два|три ( ) Логическая группировка выражений. (может)+ повторяться Функции работы с регулярными выражениями. Необходимо сказать, что 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, как заблагорассудится. На этом и закончим наш урок. Встретимся на следующем! | |
Просмотров: 606 | Рейтинг: 0.0/0 |
Всего комментариев: 0 | |