Руководство по PHP
Пред. |  | След.

# 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