PHP preg_将编号替换为两部分
我需要将长度为5的数字(例如“11111”)分成两部分,用空格表示“11111” 我的代码中缺少了什么PHP preg_将编号替换为两部分,php,preg-replace,Php,Preg Replace,我需要将长度为5的数字(例如“11111”)分成两部分,用空格表示“11111” 我的代码中缺少了什么 $zip = "11111"; $res = preg_replace('/^\d{3}[ ]?\d{2}/', '$0 $2', $zip); echo $zip; // returns 11111 echo $res; // returns 11111 多谢各位 感谢大家,我错过了简单的括号() 我需要用这个来解释一些有点难的方法:)你真的需要一个正则表达式吗?如果它始终是一个
$zip = "11111";
$res = preg_replace('/^\d{3}[ ]?\d{2}/', '$0 $2', $zip);
echo $zip; // returns 11111
echo $res; // returns 11111
多谢各位
感谢大家,我错过了简单的括号()
我需要用这个来解释一些有点难的方法:)你真的需要一个正则表达式吗?如果它始终是一个五位数的数字,则很容易将其拆分,并根据需要重新构建
echo sprintf("%s %s", substr($zip, 0, 3), substr($zip, -2));
的答案很好,但既然你的问题是:
我的代码中缺少了什么
$zip = "11111";
$res = preg_replace('/^\d{3}[ ]?\d{2}/', '$0 $2', $zip);
echo $zip; // returns 11111
echo $res; // returns 11111
我的答案是,您必须用括号捕捉组:
$zip = "11111";
$res = preg_replace('/^(\d{3})[ ]?(\d{2})/', '$1 $2', $zip);
echo $zip;
echo PHP_EOL;
echo $res;
为什么要将正则表达式用于如此简单的事情
$zip = '11111';
$first_part = substr($zip, 0, 3);
$last_part = substr($zip, 3);
至于您的正则表达式,您没有使用捕获组((…)
),因此$0/$2永远不会被定义会更好,因为从作者使用的正则表达式可以明显看出,$zip
的前三位和后两位之间可能有空格,也可能没有空格。