PHP Conference Japan 2024

mb_ereg_replace_callback

(PHP 5 >= 5.4.1, PHP 7, PHP 8)

mb_ereg_replace_callback使用回调函数执行支持多字节的正则表达式搜索和替换

描述

mb_ereg_replace_callback(
    string $pattern,
    callable $callback,
    string $string,
    ?string $options = null
): string|false|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()

返回值

成功时返回结果 string,错误时返回 false。如果 string 对当前编码无效,则返回 null

变更日志

版本 描述
8.0.0 options 现在可以为空。
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() 指定的字符编码作为此函数的字符编码。

参见

添加注释

用户贡献的注释

此页面没有用户贡献的注释。
To Top