English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

PHP Основной курс

Уровень продвинутый PHP

PHP & MySQL

PHP Референсная книга

Пример использования функции PHP preg_replace_callback() и примеры

PHP регулярные выражения (PCRE)

Функция preg_replace_callback выполняет поиск регулярного выражения и заменяет его с помощью обратного вызова.

Синтаксис

mixed preg_replace_callback ( mixed $pattern , callable $callback , mixed $subject [, int $limit = -1 [, int &$count ]] )

Этот функционал behaves similarly to preg_replace() except that it can specify a callback to perform the replacement string calculation instead of replacement.

Объяснение параметров:

  • $pattern: шаблон для поиска, может быть строкой или массивом строк.

  • $callback: обратная функция, вызываемая при каждом необходимости замены, при вызове функции передаются параметры, соответствующие совпадениям в subject.

  • $subject: целевая строка или массив строк для поиска и замены.

  • $limit: опционально, максимальное количество замен для каждого шаблона в каждом subject строки. По умолчанию -1 (без ограничений).

  • $count: опционально, количество замененных замен.

Возвратное значение

Если subject является массивом, preg_replace_callback() возвращает массив, в других случаях возвращает строку. В случае ошибки возвращается NULL.

Если найдено совпадение, возвращается замененная целевая строка (или массив строк), в других случаях subject будет возвращен без изменений.

Онлайн пример

<?php
// Увеличиваем год в тексте.
$text = "День дурака 04/01/2002\n";
$text.= "Последний рождественский день был 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);
?>

Результат выполнения приведен ниже:

День дурака 04/01/2003
Последний рождественский день был 12/24/2002

PHP регулярные выражения (PCRE)