替换字符串开头的每个空格

问题描述:

使用php preg_replace。替换字符串开头的每个空格

尝试:

$test = "  123"; 
$test = preg_replace("/^\s/","?",$test); 
echo '|' . $test; 

输出:

|? 123

我需要什么:

| ??????? 123

也试过另一种变体,但都仅更换第一个空格或ALL-IN-ONE ...


空间字符串的内部或在字符串的结尾 - 不应该被感动。

+1

你只需要删除^从正则表达式,这就是为什么你只得到第一。 – 2013-03-04 11:39:41

+0

@BojanKovacevic:如果最后发现空间会怎么样? – 2013-03-04 11:46:50

你也许可以做到这一点很容易没有正则表达式,利用strspn

$whitespaceCount = strspn($test, " \t\r\n"); 
$test = str_repeat("?", $whitespaceCount).substr($test, $whitespaceCount); 

<?php 
$test = "  12 3 s"; 
$test = preg_replace_callback("/^([\s]*)([^\s]*)/","mycalback",$test); 
echo '|' . $test; 

function mycalback($matches){ 
return str_replace (" ", "?", $matches[1]).$matches[2]; 
} 

?> 

输出:

|??????12 3 s 
+0

这将只替换空格,它将在输入字符串内部的任何位置执行,而不仅仅是在开始处。 – Jon 2013-03-04 11:38:43

+0

right thanks jon – 2013-03-04 11:39:11

为什么你只是不试试这个:

echo '|' . preg_replace('/\s/','?',' 123'); 
+0

因为它也替换了字符串中的空格,f.ex:“123 456”将返回“??? 123 ?? 456”,但我需要:“??? 123 456” – 2013-03-04 11:41:00

试试这个:从检查的字符串的开头模式删除^,所以会发生什么是它才刚刚开始替代空间(只有一个空格)

$test = "  123"; 
$test = preg_replace("/\s/","?",$test); 
echo '|' . $test; 
+0

但是现在它取代了所有空格,而不仅仅是字符串开头的那些空格。 – Jon 2013-03-04 11:42:47

+0

如果字符串像'$ test =“12 3”;'。输出是什么? – 2013-03-04 11:43:09

+0

“??? 123 3”(字符串中的空格不应该被触摸) – 2013-03-04 11:46:39

$test = "  123"; 
$test = preg_replace("/^[ ]|[ ]/","?",$test); 
echo '|' . $test; 
+0

该模式也会替换字符串内的空格。 – 2013-03-04 11:49:31