在 PHP 中处理 JSON 数据时,有时我们需要对字段名进行替换操作。虽然常用的方法是将 JSON 解码成数组后再处理,但在某些场景下,直接用正则表达式对 JSON 字符串进行字段名替换会更快捷。本文将详细介绍如何使用 PHP 的 mb_eregi_replace 函数替换 JSON 数据中的字段名,并通过示例代码进行说明。
mb_eregi_replace 是 PHP 多字节字符串函数库(mbstring)中的一个正则替换函数,它支持对字符串进行不区分大小写的正则替换,且支持多字节字符编码,适合处理包含中文等多字节字符的字符串。
函数原型:
string mb_eregi_replace ( string $pattern , string $replacement , string $string [, string $option = "msr" ] )
$pattern:要匹配的正则表达式模式(不区分大小写)
$replacement:替换的字符串
$string:输入的字符串
$option:可选参数,指定匹配行为,通常用默认即可
JSON 字符串字段名通常用双引号包裹,直接字符串替换容易出错;
mb_eregi_replace 支持多字节,兼容各种编码格式的 JSON;
支持不区分大小写替换,避免大小写差异导致漏替换;
适合简单的字段名替换场景,不需要先解析 JSON。
假设有如下 JSON 字符串:
{
"UserName": "张三",
"UserAge": 28,
"UserEmail": "zhangsan@example.com"
}
我们想将所有字段名中的 "User" 替换成 "Member"。操作步骤:
使用正则匹配字段名部分,例如匹配 "UserName" 中的 UserName。
利用 mb_eregi_replace 对匹配到的字段名进行替换。
输出新的 JSON 字符串。
<?php
// 原始 JSON 字符串
$json = '{"UserName":"张三","UserAge":28,"UserEmail":"zhangsan@m66.net"}';
// 定义替换规则,将字段名前缀 "User" 替换成 "Member"
// 正则表达式匹配双引号内以 User 开头的字段名,捕获字段后半部分
$pattern = '"User([a-zA-Z0-9_]*)"';
// 替换字符串,将 User 替换成 Member,保持后缀不变
$replacement = '"Member\\1"';
// 使用 mb_eregi_replace 进行替换
$newJson = mb_eregi_replace($pattern, $replacement, $json);
// 输出替换后的 JSON 字符串
echo $newJson;
?>
{"MemberName":"张三","MemberAge":28,"MemberEmail":"zhangsan@m66.net"}
正则表达式 '"User([a-zA-Z0-9_]*)"' 匹配所有字段名双引号内以 "User" 开头的字段名。
使用捕获组 ([a-zA-Z0-9_]*) 获取字段名剩余部分。
替换中用 "Member\\1" 将 "User" 换成 "Member" 并保留字段名后缀。
这样做不影响字段对应的值。
JSON 中出现的 URL 域名已替换为 m66.net,满足需求。
这种方法只适合字段名结构简单、格式规范的 JSON。
如果 JSON 字符串中含有复杂嵌套结构,推荐先用 json_decode 解码,再用数组操作替换字段名,最后用 json_encode 生成新 JSON。
mb_eregi_replace 不支持复杂正则语法,如断言等,如果替换需求复杂,请选择 PCRE 函数或 JSON 解析方案。