(PHP 5 >= 5.4.1, PHP 7, PHP 8)
mb_ereg_replace_callback — 使用回调执行多字节支持的正则表达式搜索和替换
$pattern
,$callback
,$string
,$options
= null
扫描 string
以查找与 pattern
的匹配项,然后使用 callback
函数的输出替换匹配的文本。
此函数的行为与 mb_ereg_replace() 几乎完全相同,除了指定 callback
而不是 replacement
参数。
pattern
正则表达式模式。
可以在 pattern
中使用多字节字符。
callback
将被调用并传递 string
字符串中匹配元素数组的回调函数。回调函数应返回替换字符串。
你通常只需要在一个地方使用 mb_ereg_replace_callback() 的 callback
函数。在这种情况下,你可以在 mb_ereg_replace_callback() 的调用中使用 匿名函数 来声明回调函数。通过这种方式,你可以将所有调用信息放在一个地方,并且不会因为在其他地方未使用回调函数名称而使函数命名空间混乱。
string
要检查的 string。
options
搜索选项。有关说明,请参见 mb_regex_set_options()。
版本 | 描述 |
---|---|
8.0.0 |
options 现在可以为 null。 |
7.1.0 | 该函数检查 string 是否对当前编码有效。 |
示例 #1 mb_ereg_replace_callback() 示例
<?php
// 此文本用于 2002 年
// 我们想将它更新到 2003 年
$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 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
// 此文本用于 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() 指定的字符编码作为此函数的字符编码。