Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/webpack/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP preg_将编号替换为两部分_Php_Preg Replace - Fatal编程技术网

PHP preg_将编号替换为两部分

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 多谢各位 感谢大家,我错过了简单的括号() 我需要用这个来解释一些有点难的方法:)你真的需要一个正则表达式吗?如果它始终是一个

我需要将长度为5的数字(例如“11111”)分成两部分,用空格表示“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
的前三位和后两位之间可能有空格,也可能没有空格。