用 替换前导空格 使用PHP正则表达式使用相同的次数

pra*_*vin 1 php regex

我想用 相同的出现次数替换前导空格,即

位说明:

如果输入中存在一个前导空格,那么它应该替换为一个  

如果输入中存在两个前导空格,那么它应该替换为两个  

如果输入中存在n个前导空格,那么它应该用n次精确替换  

Ex.1:
 My name is XYZ
output:
 My name is XYZ

Ex.2 :
  My name is XYZ
output:
  My name is XYZ
Run Code Online (Sandbox Code Playgroud)

我想用PHP正则表达式替换只有前导空格.

欢迎您的建议.

谢谢

Ala*_*ore 6

preg_replace('/\G /', ' ', $str);
Run Code Online (Sandbox Code Playgroud)

\G 匹配最后一个匹配结束的位置,如果没有上一个匹配则匹配字符串的开头.

编辑:实际上,在PHP中,它匹配下一个匹配应该开始的位置.这不一定与上一场比赛结束的地方相同.


ken*_*ytm 5

$len_before = strlen($str);
$str = ltrim($str, ' ');
$len_after = strlen($str);
$str = str_repeat(' ', $len_before - $len_after) . $str;
Run Code Online (Sandbox Code Playgroud)

使用preg_replace还有

$str = preg_replace('/^( +)/e', 'str_repeat(" ", strlen("$1"))', $str);
Run Code Online (Sandbox Code Playgroud)

但请注意,它使用了/e标志。

有关结果,请参阅http://www.ideone.com/VWNKZ