International PHP Conference 2019 - Spring Edition

mb_ereg_replace_callback

(PHP 5 >= 5.4.1, PHP 7)

mb_ereg_replace_callbackВыполняет поиск и замену по регулярному выражению с поддержкой многобайтовых кодировок используя callback-функцию

Описание

string mb_ereg_replace_callback ( string $pattern , callable $callback , string $string [, string $option = "msr" ] )

Проверяет строку string на совпадение с шаблоном pattern, затем заменяет найденный текст результатом функции callback.

Поведение этой функции почти идентично с функцией mb_ereg_replace(), за исключением того, что вместо строки замены replacement необходимо определять функцию callback.

Список параметров

pattern

Шаблон регулярного выражения.

Мультибайтовые символы могут использоваться в pattern.

callback

Функция, которая будет вызвана для получения и передачи массива совпадений в строку subject. Сallback-функция должна возвращать строку для замены.

Часто может потребоваться объявлять функцию callback для mb_ereg_replace_callback() только в одном месте. В таком случае используйте анонимные функции для определения callback-функции внутри вызова mb_ereg_replace_callback(). При таком подходе у вас будет вся информация про вызов в одном месте и вы не загрязните пространство имен функции именем своей callback-функции, которое больше нигде не используется.

string

Строка (string) для проверки.

option

Опция поиска. Подробнее см. mb_regex_set_options().

Возвращаемые значения

Результирующая строка в случае успеха, или FALSE в случае ошибки.

Примечания

Замечание:

Для этой функции будет использована внутренняя кодировка или кодировка, установленная функцией mb_regex_encoding().

Примеры

Пример #1 Пример функции mb_ereg_replace_callback()

<?php
// этот текст использовался в 2002
// мы хотим обновить для использования его в 2003
$text "День смеха - 04/01/2002\n";
$text.= "Последнее Рождество было 12/24/2001\n";
// callback-функция
function next_year($matches)
{
  
// как обычно: в $matches[0] будет полное совпадение
  // $matches[1] - совпадение для первого маски,
  // заключенной в '(...)' и т.д.
  
return $matches[1].($matches[2]+1);
}
echo 
mb_ereg_replace_callback(
            
"(\d{2}/\d{2}/)(\d{4})",
            
"next_year",
            
$text);

?>

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

День смеха - 04/01/2003
Последнее Рождество было 12/24/2002

Пример #2 mb_ereg_replace_callback() использует анонимную функцию, поддерживаемую в PHP 5.3.0 или более поздней версии

<?php
// этот текст использовался в 2002
// мы хотим обновить для использования его в 2003
$text "День смеха - 04/01/2002\n";
$text.= "Последнее Рождество было 12/24/2001\n";

echo 
mb_ereg_replace_callback(
            
"(\d{2}/\d{2}/)(\d{4})",
            function (
$matches) {
               return 
$matches[1].($matches[2]+1);
            },
            
$text);
?>

Смотрите также

  • mb_regex_encoding() - Устанавливает/получает текущую кодировку для многобайтового регулярного выражения
  • mb_ereg_replace() - Осуществляет замену по регулярному выражению с поддержкой многобайтовых кодировок
  • Анонимные функции
  • Информация о типе callback

add a note add a note

User Contributed Notes

There are no user contributed notes for this page.
To Top