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