main_logo Контакты (услуги)
На главную страницу
КАТЕГОРИИ
» PHP 
» Java Script 
» JSP 
» ASP.net 
» HTML 
» CSS 
» Ajax 
» XML 
» SEO 
» PERL 
» WEB  
» Сертификация 
» Книги (ebook) 
» Скрипты 

TOP 10-новостей

Спецификация CSS
Java Script DOM AJAX От новичка до проффесионала
Бан сайта GOOGLE, YANDEX или как проверить забанен ли сайт
Первое знакомство с Oracle Workshop первый проект с J2EE
Первое знакомство с Oracle Workshop первый проект с J2EE
100 лучших уроков по Flash
DHTML и CSS 3-е издание
"Эффективный самоучитель"
Подборка книг WEB Дизайн, Java Script, HTML
Визуальный ON Line Редактор! просто Бомба!
Класс PHP PChart для построения графиков! Мощный инструмент для построения Web графиков
Создание Captch, Создаем капчу
Построение объемного графика, гистограммы
Построение On - line графика PHP, HTML, WEB
On Line Учебник CSS, HTML, SEO, Java Script
Самоучитель JavaScript
Книга Java Soap
Java. Eclipse для чайников
Книга PHP 5
CodeNotes for J2EE. EJB, JDBC, JSP, and Servlets
Философия Java, 2е издание (Б. Эккель)
SEO для начинающих Основы
Книга Java Server Pages (JSP скачать бесплатно). Библиотека профессионала
Установка времени выполнения скрипта. Ограничение времени выполнения
Не отправляются письма на Mail.ru, Rambler.ru (Функция PHP MAIL () )
Обучающее видео Видеоурок основы Asp.net и Ajax
Простая CMS (ЦМС) Umbraco для .net
Супер легкая качалка на .Net для самых популярных файлообменников
Программа для скачивания книг Google


Регулярные выражения

Сами регулярные выражения не являются новинкой, превнесенной 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 ( ereg i _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, как заблагорассудится.

На этом и закончим наш урок. Встретимся на следующем!

Источник: Статья взята с MyPHP.NET.RU


Интегрированные среды разработки для PHP
Название Лицензия Сайт
Eclipse PDT (PHP Development Tools) Freeware http://www.eclipse.org/pdt/
Zend Studio Shareware http://www.zend.com/products/zend_studio/
phpDesigner Shareware http://www.mpsoftware.eu/
PHP Expert Editor Shareware + бесплатно для лиц проживающих в СНГ http://www.phpexperteditor.com/
NetBeans IDE Freeware http://www.netbeans.org/
Delphi for PHP Trial http://www.codegear.com/products/delphi/php
NuSphere Trial http://www.nusphere.com/

Дизайн и верстка - Сергеенко С.В., Разработка - Сергеенко С.В. | 2009 Яндекс цитирования    Rambler's Top100