(PHP 5 >= 5.4.1, PHP 7)
mb_ereg_replace_callback — Выполняет поиск и замену по регулярному вражению с поддержкой многобайтовых кодировок используя callback-функцию
$pattern
, callable $callback
, string $string
[, string $option
= "msr"
] )
Проверяет строку string
на совпадение с шаблоном
pattern
, затем заменяет найденный текст
результатом callback
функции.
Поведение этой функции почти идентично с функцией mb_ereg_replace(),
за исключением того, что вместо строки замены
replacement
необходимо определять
callback
функцию.
pattern
Шаблон регулярного выражения.
мультибайтовые символы могут использоваться в шаблоне
.
callback
Функция, которая будет вызвана для получения и передачи массива совпадени
в строку subject
. Сallback-функция должна возвращать строку
для замены.
Часто может потребоваться объявлять callback
функцию
для mb_ereg_replace_callback() только в одном месте.
В таком случае используйте
анонимные функции для
определения callback функции внутри вызова
mb_ereg_replace_callback(). При таком подходе у вас будет вся
информация про вызов в одном месте и вы не загрязните пространство имен функции
именем своей callback-функции не используемой больше нигде.
string
Строка для проверки.
option
Можно произвести настройку совпадений используя параметр
option
. Если указан параметр i, будет
проигнорирован регистр символов. Если указан параметр x,
будут проигнорированы пробельные символы. Если указан параметр m,
совпадения будут найдены в мультистроковом режиме и разрыв строки будет включен с
помощью '.'. Если определен параметр p, совпадения будут искаться в
режиме POSIX, разрыв линии будет считаться за обычный символ. Заметьте, что параметр
e не может быть использован для функции
mb_ereg_replace_callback().
Результирующая строка в случае успеха, или FALSE
в случае ошибки.
Замечание:
Для этой функции будет использована внутренняя кодировка или кодировка, установленная функцией mb_regex_encoding().
Пример #1 Пример функции mb_ereg_replace_callback()
<?php
// this text was used in 2002
// we want to get this up to date for 2003
$text = "April fools day is 04/01/2002\n";
$text.= "Last christmas was 12/24/2001\n";
// the callback function
function next_year($matches)
{
// as usual: $matches[0] is the complete match
// $matches[1] the match for the first subpattern
// enclosed in '(...)' and so on
return $matches[1].($matches[2]+1);
}
echo mb_ereg_replace_callback(
"(\d{2}/\d{2}/)(\d{4})",
"next_year",
$text);
?>
Результат выполнения данного примера:
April fools day is 04/01/2003 Last christmas was 12/24/2002
Пример #2 mb_ereg_replace_callback() использует анонимную функцию, поддерживаемую в PHP 5.3.0 или более поздней версии
<?php
// this text was used in 2002
// we want to get this up to date for 2003
$text = "April fools day is 04/01/2002\n";
$text.= "Last christmas was 12/24/2001\n";
echo mb_ereg_replace_callback(
"(\d{2}/\d{2}/)(\d{4})",
function ($matches) {
return $matches[1].($matches[2]+1);
},
$text);
?>