boolean preg_match(string pattern, string text, array matches, integer flags)
Функция preg_match (листинг 12.80) представляет собой аналог функции ereg, совместимый с Perl. Она оценивает аргумент pattern как регулярное выражение и пытается отыскать совпадения в данных, переданных аргументом text. Если задан необязательный аргумент matches, в массив добавляется каждое новое совпадение. Значение TRUE возвращается, если будет найдено как минимум одно совпадение, в противном случае возвращается значение FALSE.
Первый элемент массива matches, имеющий нулевой индекс, должен содержать совпадения для всего регулярного выражения. Последующие элементы этого массива содержат совпадения для подвыражений. В примере эти выражения взяты в скобки.
Для того чтобы функция preg_match возвращала смещение каждого найденного совпадения, аргумент flags должен иметь значение PREG_OFFSET_CAPTURE.
Листинг 12.80. Функция preg_match
<?php
// показать пользовательского агента print(" Пользовательский агент: {$_SERVER['HTTP_USER_AGENT']}<br>n");
// сделать попытку проанализировать пользовательского агента if(preg_match("/*(.+)/([0-9]).([0-9]+)/", $_SERVER['HTTP_USER_AGENT'], $matches))
{
print("Полное совпадение: $matches[0]<br>n"); print("Браузер: $matches[1]<br>n"); print("Версия: $matches[2]<br>n"); print("Релиз: $matches[3]<br>n");
}
else
{
print(" Пользовательский агент не распознан");
}
integer preg_match_all (string pattern, string text, array matches, integer order)
Функция preg_match_all (листинг 12.81) подобна функции preg_match. Данные, переданные аргументом text, сравниваются с данными шаблона pattern, однако вместо завершения работы после обнаружения первого соответствия продолжается поиск последующих соответствий. Указание аргумента matches необходимо, и он принимает двумерный массив. Метод заполнения массива задается аргументом order. Ему могут задаваться две константы: PREG_PATTERN_ORDER (значение по умолчанию) и PREG_SET_ORDER. Этот флаг можно комбинировать с PREG_OFFSET_CAPTURE. Необходимо установить количество совпадений по полному шаблону.
Если задано значение PREG_PATTERN_ORDER, первый элемент массива matches будет содержать массив всех совпадений по полному шаблону. Другие элементы массива будут содержать массивы совпадений по субшаблонам. Если задано значение PREG_SET_ORDER, каждый элемент массива matches будет содержать массив, организованный наподобие массивов, созданных функцией preg_match. Первый элемент хранит полностью соответствующую строку. Все последующие элементы содержат совпадения по субшаблонам относительно этого совпадения. Если задано значение PREG_OFFSET_CAPTURE, возвращается смещение каждого совпадения.
Листинг 12.81. Функция preg_match_all
<?php
// создать тестовые данные
$paragraph = "Это <Ь>короткий</Ь> абзац. Несколько "; $paragraph .= "<Ь>слов</Ь> и <Ь>несколько фраз</Ь>, "; $paragraph .= "выделенных тегами <b>bold</b>. "; /*
** для поиска слов, выделенных жирным шрифтом, использовать PREG_PATTERN_ORDER
*/
preg_match_all("|<[*>]+>(.*)</[*>]+>|", $paragraph,
$match, PREG_PATTERN_ORDER); // распечатать полное совпадение
print("<b>Совпадения по субшаблонам</b>:<br>n"),• for($i=0; $i < count($match[0]); $i++)
{
print(htmlentities($match[0][$i]) . "<br>n");
}
print("<b>Совпадения по субшаблонам</b>:<br>n"),• for($i=0; $i < count($match[1]); $i++)
{
print(htmlentities($match[0][$i]) . "<br>n");
}
/*
** использовать PREG_SET_ORDER для поиска слов, выделенных жирным шрифтом
*/
preg_match_all("|<[*>]+>(.*)</[*>]+>|", $paragraph,
$match, PREG_SET_ORDER); foreach($match as $m)
{
print(htmlentities($m[0])); for($i=1; $i < count($m); $i++)
{
print(" (".htmlentities($m[$i]).")");
}
print("<br>n");
}
string preg_quote(string text, string delimiter)
Функция preg_quote возвращает значение, переданное аргументом text, с обратными косыми перед символами, имеющими специальное значение для функций этого раздела. Специальными символами являются
• + * ? [ Л ] $ ( ) { } = ! < > | :
Необязательный аргумент delimiter устанавливает заданный вами ограничитель.
string preg_replace(string pattern, string replacement, string text, integer limit)
Функция preg_replace (листинг 12.82) представляет собой аналог функции ereg_replace, совместимый с Perl. Она производит замену данных, переданных аргументом text и совпадающих с шаблоном, заданным аргументом pattern, значениями, которые заданы аргументом replacement. Само значение аргумента text не изменяется, а возвращается его измененная версия.
Если аргумент pattern содержит подвыражения в скобках, аргумент replacement должен содержать специальный код, определяющий, какое подвыражение будет заменяться. Эта форма использует две обратные косые черты с последующей одной цифрой от 0 до 9. Нуль соответствует всему выражению, а цифры 1-9 соответствуют совпадениям первых девяти подвыражений. Подвыражения нумеруются слева направо, что соответствует вложенным подвыражениям. Необязательным аргументом limit задается максимальное количество замен.
| Листинг 12.82. Функция preg_replace_
<?php
// поменять переводы строк на теги разрыва
$text = "строка1nстрока2nстрока3n";
print(preg_replace("|n|", "<br>", $text));
print("<hr>n");
//перемещать эти слова
$text = "one two three four";
print(preg_replace("|([a-z]+) ([a-z]+) ([a-z]+) ([a-z]+)|", "\4 \2 \1 \3", $text));
?>
ТОП-10 популярных
Для работы с вещественными числами в MySQL предусмотрено три типа данных - это типы FLOAT, DOUBLE, DECIMAL. Числовой тип FLOAT...
БОЛЬШЕ БОЛЬШИХ LCD-мониторов
Процесс вытеснения с рынка мониторов с электронно-лучевой трубкой (CRT) продолжается. О смещении акцентов в пользу LCD-мониторов теперь заявляют даже те...
Процесс вытеснения с рынка мониторов с электронно-лучевой трубкой (CRT) продолжается. О смещении акцентов в пользу LCD-мониторов теперь заявляют даже те...
Больше больших LCD-мониторов
Процесс вытеснения с рынка мониторов с электронно-лучевой трубкой (CRT) продолжается. О смещении акцентов в пользу LCD-мониторов теперь заявляют даже те...
Процесс вытеснения с рынка мониторов с электронно-лучевой трубкой (CRT) продолжается. О смещении акцентов в пользу LCD-мониторов теперь заявляют даже те...
НОУТБУК с блестящим экраном
Eсли выпустившая ноутбук фирма предлагает его в качестве «замены настольному ПК», то это должно подразумевать под собой нечто большее, чем...
Eсли выпустившая ноутбук фирма предлагает его в качестве «замены настольному ПК», то это должно подразумевать под собой нечто большее, чем...
Иди и пиши. TravelMate C100
Планшетный компьютер платформы Tablet PC обязан в первую очередь быть легким, способным достаточно долго работать без подзарядки батарей. Эти требования...
Планшетный компьютер платформы Tablet PC обязан в первую очередь быть легким, способным достаточно долго работать без подзарядки батарей. Эти требования...
Магнито-оптический дисковод DynaMO
Cейчас, когда традиционные флоппи-дисководы на долгие годы замерли в своем развитии, поиск альтернативных носителей продолжается, и ситуация, казалось бы, разрешилась...
Cейчас, когда традиционные флоппи-дисководы на долгие годы замерли в своем развитии, поиск альтернативных носителей продолжается, и ситуация, казалось бы, разрешилась...
Компьютер для гурманов.«Эксимер ДМ»
Российская компания «Эксимер ДМ», известная как производитель настольных компьютеров, рабочих станций, серверов и ноутбуков, выступила техническим спонсором проведения торжеств, посвященных...
Российская компания «Эксимер ДМ», известная как производитель настольных компьютеров, рабочих станций, серверов и ноутбуков, выступила техническим спонсором проведения торжеств, посвященных...
Для длинных строк, т.е. строк длиннее 255 символов, в MySQL предусмотрены типы BLOB (Binary Large Object, большой двоичный объект) и...
В дополнение к календарным типам, предназначенным для хранения даты и времени отдельно, MySQL также поддерживает гибридные типы данных DATETIME и...
Вообще, к изменению настроек сервера прибегают очень редко. В MySQL программа заранее настроена так, чтобы соответствовать самым распространенным и основным...
PHP. Кодирование и декодирование. Часть Двадцатая.
26-01-2015
<< Предыдущая статья | Следующая статья >> |
PHP. Кодирование и декодирование. Часть Девятнадцатая. | PHP. Кодирование и декодирование. Часть Двадцать Первая. |