如何在一个语句中用空格分隔字母数字值
示例:
$arr="new stackoverflow 244code 7490script design";
那么如何用 space 将 alpha 和 number 分开,如下所示:
$arr="new stackoverflow 244 code 7490 script design";
您可以使用preg_split()函数
检查 演示 Codeviper
preg_split('#(?<=\d)(?=[a-z])#i', "new stackoverflow 244code 7490script design");
print_r(preg_split('#(?<=\d)(?=[a-z])#i', "new stackoverflow 244code 7490script design"));
Array ( [0] => new stackoverflow 244 [1] => code 7490 [2] => script design )
您还可以使用preg_replace()函数
检查 演示 Codeviper
echo preg_replace('#(?<=\d)(?=[a-z])#i', ' ', "new stackoverflow 244code 7490script design");
new stackoverflow 244 code 7490 script design
希望这对您有帮助!
您可以使用preg_replace(示例):
$arr = "new stackoverflow 244code 7490script design";
$newstr = preg_replace('#(?<=\d)(?=[a-z])#i', ' ', $arr);
echo $newstr; // new stackoverflow 244 code 7490 script design
regex pattern
来自user1153551
的答案。
preg_replace
:
$new = preg_replace('/(\d)([a-z])/i', "$1 $2", $arr);
(\d)
匹配并捕获一个数字。 ([a-z])
匹配并接住一封信。在替换中,它放回数字,添加空格并放回字母。
如果你不想使用反向引用,你可以使用lookarounds:
$new = preg_replace('/(?<=\d)(?=[a-z])/i', ' ', $arr);
如果您还想在字母和数字之间进行替换...
$new = preg_replace('/(?<=\d)(?=[a-z])|(?<=[a-z])(?=\d)/i', ' ', $arr);
(?<=\d)
是正向后查找,确保当前位置之前有一个数字。
(?=[a-z])
是正向前瞻,确保当前位置后面有一个字母。
同样,
(?<=[a-z])
确保当前位置之前有一个字母,(?=\d)
确保当前位置之后有一个数字。
另一种选择是拆分并用空格重新连接:
$new_arr = preg_split('/(?<=\d)(?=[a-z])/i', $arr);
$new = implode(' ', $new_arr);
或者...
$new = implode(' ', preg_split('/(?<=\d)(?=[a-z])/i', $arr));
preg_split — 通过正则表达式分割字符串
<?php
// split the phrase by any number of commas or space characters,
// which include " ", \r, \t, \n and \f
$matches = preg_split('#(?<=\d)(?=[a-z])#i', "new stackoverflow 244code 7490script design");
echo $matches['0'],' '.$matches['1'].' '.$matches['2'];
?>
我不赞成在这项任务中使用
preg_split()
,它只会在最终修复输入字符串之前做更多的工作。
preg_replace()
也是正确的,但是在每个步骤上使用两个环视将使正则表达式引擎比它需要的更加努力地工作。为了获得最佳效率,请贪婪地匹配一个或多个数字,用 \K
忘记它们,然后向前查找单个字母。
而不是
/(?<=\d)(?=[a-z])/i
在输入字符串上需要 87 个步骤。
使用
/\d\K(?=[a-z])/i
在输入字符串上仅需要 32 个步骤。
PHP 代码:(演示)
$string = 'new stackoverflow 244code 7490script design';
echo preg_replace('/\d+\K(?=[a-z])/i', ' ', $string);
// new stackoverflow 244 code 7490 script design