Русская документация для фриланесеров
Главная arrow PHP arrow PHP и регулярные выражения  
08.01.2009 г.
Главное меню
Главная
Поиск
PHP
.NET
Java
Ruby
C++
Delphi
Другие языки
Базы данных
Безопасность
Сети
ОС
Мобильные
Теория дизайна
WEB
Разное
Админцентр



PHP и регулярные выражения Печать E-mail
Автор Westry   
23.03.2008 г.
Прежде всего, напомню, что регулярные выражения представляют собой обычные текстовые строки, которые используются как шаблоны для анализа текста. Эти строки составляются по специальным правилам, позволяющим описать практически любую последовательность символов. В состав PHP входит три набора функций для работы с регулярными выражениями. К первому набору относятся функции, названия которых начинаются с ereg. Эти функции работают с регулярными выражениями стандарта POSIX. Второй набор функций, по сути, является расширением первого, и допускает использование в регулярных выражениях многобайтных символов (Unicode). Эти функции начинаются с mb_. Третий набор функций (PCRE библиотека) работает с PERL-совместимыми регулярными выражениями. Названия этих функций начинаются с приставки preg. Этот набор функций обеспечивает большую функциональность и быстродействие, поэтому рассказывать я буду именно о нем.

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

preg_grep()
preg_match_all()
preg_match()

Разница между ними заключается в количестве передаваемых параметров и возвращаемых значений. Например, preg_match() прекращает работу после первого найденного совпадения, а preg_match_all() – после того, как будут найдены все совпадения.

Замену текста можно выполнить с помощью функций:

preg_replace_callback()
preg_replace()

Как несложно догадаться, preg_replace_callback() позволяет указать специальную функцию, которая будет использована для замены найденных совпадений. preg_replace() – просто заменяет найденные совпадения на заданную строку.

Функция preg_split() разбивает текст по заданному регулярному выражению.

Остальные функции носят вспомогательный характер. preg_last_error() – возвращает код последней ошибки, возникшей при работе библиотеки. preg_quote() – экранирует символы в регулярном выражении, т.е. перед каждым служебным символом вставляет обратный слеш.

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

$text = " Этот e-mail защищен от спам-ботов. Для его просмотра в вашем браузере должна быть включена поддержка Java-script , Этот e-mail защищен от спам-ботов. Для его просмотра в вашем браузере должна быть включена поддержка Java-script , Этот e-mail защищен от спам-ботов. Для его просмотра в вашем браузере должна быть включена поддержка Java-script Этот e-mail защищен от спам-ботов. Для его просмотра в вашем браузере должна быть включена поддержка Java-script ";
$pattern = "/[,|\s]?(\S+)@/";
preg_match_all($pattern, $text, $res);
foreach (
$res[1] as $name) {
    echo
"<p>".$name."</p>";
}


Имена пользователей соответствуют первой подмаске регулярного выражения, которое находится в переменной $pattern. Функция preg_match_all ищет все совпадения с регулярным выражением в списке адресов ($text) и сохраняет их в переменной $res.

Как видите, понадобилось всего шесть строк кода.

К недостаткам библиотеки можно отнести не полную поддержку кириллицы. Например, синтаксис регулярных выражений предусматривает возможность задания модификатора «i», который указывает, что во время поиска не нужно учитывать регистр символов. Но если текст содержит символы кириллицы (кодировка UTF-8), то на результат поиска этот модификатор влияния не окажет. Обойти эту проблему можно, если заранее преобразовать текст к нижнему регистру (например, с помощью функции mb_convert_case).

В заключение хочу сказать, что большинство проблем возникает из-за ошибок в синтаксисе самих регулярных выражений. Тут может помочь только тщательное тестирование. Не важно, каким способом, вручную, с помощью модульных тестов ( simpletest) или on-line служб проверки регулярных выражений , главное, чтобы результат был правильным.

Автор: Стаценко Владимир
Сайт автора: simplecoding.org

 
« Пред.   След. »
Webdesign by Webmedie.dk Webdesign by Webmedie.dk