Наш чат в Telegram для обмена идеями, проектами, мыслями, людьми в сфере ИТ г.Ростова-на-Дону: @it_rostov

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() пример
// Этот текст был использован в 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()
/* фильтр, подобный тому, что используется в системах 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(), регулярные выражения на PHP, примеры использования регулярных выражений на php.

Регулярные выражения в PHP.
Примеры регулярных выражения в PHP.
Все функции регулярные выражения
Описание на ru2.php.net
Описание на php.ru