3 回答
TA贡献1848条经验 获得超6个赞
\G
为了胜利!
https://www.regular-expressions.info/continue.html
\G
将匹配字符串的开头并继续匹配,直到无法匹配为止。
从字符串的开头匹配一个零,然后一次一个地匹配后面的每个零。将每个匹配的零替换为空格。
代码:(演示)
$pin = '0010'; var_export(preg_replace('~\G0~', ' ', $pin));
输出:
' 10'
TA贡献1780条经验 获得超4个赞
我不知道如何使用正则表达式更轻松地做到这一点,但是您可以使用以下方法使其他代码更加简洁str_repeat:
$pin = '0010';
$temp = ltrim($pin, '0');
$spaces = strlen($pin) - strlen($temp);
$new_pin = str_repeat(' ', $spaces) . $temp;
echo $new_pin;
TA贡献1786条经验 获得超11个赞
你说:
但如果可能的话我正在寻找更有效的东西
首先,请注意单行不一定有效(正如您尝试的 preg_replace() 一样,正则表达式实际上有点慢,因为它首先被编译)。
其次,您可以更好地采用对字符串进行两次传递的方法。这也可以就地编辑字符串,而无需额外的字符串变量,这在您的情况下是理想的。
片段:
<?php
$str = '000010';
$len = strlen($str);
for($i = 0; $i < $len; ++$i){
if($str[$i] == '0'){
$str[$i] = ' ';
}else{
break;
}
}
echo $str;
- 3 回答
- 0 关注
- 139 浏览
添加回答
举报