создание и продвижение сайта (вбиваю в ТОП-10, как гвозди)Настройка и сопровождение платной рекламы яндекс.директ

PHP. Руководство по PHP. 2005

preg_replace_callback

Пред.

След.

preg_replace_callback

(PHP 4 >= 4.0.5, PHP 5)preg_replace_callback -- Выполняет поиск по регулярному выражению и замену с использованием функции обратного вызова

Описание

mixed preg_replace_callback (mixed pattern, callback callback, mixed subject [, int limit])

Поведение этой функции во многом напоминает

preg_replace(), за исключением того, что вместо

параметра replacement необходимо указывать

callback функцию, которой в качестве

входящего параметра передается массив найденных вхождений.

Ожидаемый результат - строка, которой будет произведена замена.

Пример 1. preg_replace_callback() пример

<?php

// Этот текст был использован в 2002 году

// мы хотим обновить даты к 2003 году

$text = "April fools day is 04/01/2002\n";

$text.= "Last christmas was 12/24/2001\n";

// функция обратного вызова

function next_year($matches)

{

// как обычно: $matches[0] - полное вхождение шаблона

// $matches[1] - вхождение первой подмаски,

// заключенной в круглые скобки, и так далее...

return $matches[1].($matches[2]+1);

}

echo preg_replace_callback(

"|(\d{2}/\d{2}/)(\d{4})|",

"next_year",

$text);

// результат:

// April fools day is 04/01/2003

// Last christmas was 12/24/2002

?>

Достаточно часто callback функция, кроме как в вызове

preg_replace_callback(), ни в чем больше не участвует.

Исходя из этих соображений, можно использовать create_function()

для создания безымянной функции обратного вызова непосредственно

в вызове preg_replace_callback().

Если вы используете такой подход, вся информация, связанная с заменой по

регулярному выражению, будет собрана в одном месте, и пространство имен

функций не будет загромождаться неиспользуемыми записями.

Пример 2. preg_replace_callback() и create_function()

<?php

/* фильтр, подобный тому, что используется в системах Unix

* для преобразования в заглавные начальных букв параграфа */

$fp = fopen("php://stdin", "r") or die("can't read stdin");

while (!feof($fp)){

$line = fgets($fp);

$line = preg_replace_callback(

'|<p>\s*\w|',

create_function(

// Использование одиночных кавычек в данном случае принципиально,

// альтернатива - экранировать все символы '$'

'$matches',

'return strtolower($matches[0]);'

),

$line

);

echo $line;

}

fclose($fp);

?>

Смотрите также preg_replace() и

create_function().

Пред.

Начало

След.

preg_quote

Уровень выше

preg_replace

Отвечу на любые вопросы. С уважением, Дмитрий Владимирович.

Ваше письмо×
Free Web Hosting