替换字符串开头的每个空格
使用php preg_replace。替换字符串开头的每个空格
尝试:
$test = " 123";
$test = preg_replace("/^\s/","?",$test);
echo '|' . $test;
输出:
|? 123
我需要什么:
| ??????? 123
也试过另一种变体,但都仅更换第一个空格或ALL-IN-ONE ...
空间字符串的内部或在字符串的结尾 - 不应该被感动。
你也许可以做到这一点很容易没有正则表达式,利用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
这将只替换空格,它将在输入字符串内部的任何位置执行,而不仅仅是在开始处。 – Jon 2013-03-04 11:38:43
right thanks jon – 2013-03-04 11:39:11
为什么你只是不试试这个:
echo '|' . preg_replace('/\s/','?',' 123');
因为它也替换了字符串中的空格,f.ex:“123 456”将返回“??? 123 ?? 456”,但我需要:“??? 123 456” – 2013-03-04 11:41:00
试试这个:从检查的字符串的开头模式删除^
,所以会发生什么是它才刚刚开始替代空间(只有一个空格)
$test = " 123";
$test = preg_replace("/\s/","?",$test);
echo '|' . $test;
但是现在它取代了所有空格,而不仅仅是字符串开头的那些空格。 – Jon 2013-03-04 11:42:47
如果字符串像'$ test =“12 3”;'。输出是什么? – 2013-03-04 11:43:09
“??? 123 3”(字符串中的空格不应该被触摸) – 2013-03-04 11:46:39
$test = " 123";
$test = preg_replace("/^[ ]|[ ]/","?",$test);
echo '|' . $test;
该模式也会替换字符串内的空格。 – 2013-03-04 11:49:31
你只需要删除^从正则表达式,这就是为什么你只得到第一。 – 2013-03-04 11:39:41
@BojanKovacevic:如果最后发现空间会怎么样? – 2013-03-04 11:46:50