我正在扫描表单字段条目($text
)以查找空格,并使用preg_replace用空白点替换空格。
$text=preg_replace('/\s/',' ',$text);
这很有效,除非一行中有多个连续的空格。他们都被视为空白。
如果我知道会有多少空格,我可以使用它:
$text=preg_replace('/ {2,}/','**' ,$text);
但是我永远不会确定输入可以有多少空格。
Sample Input 1: This is a test.
Sample Input 2: This is a test.
Sample Input 3: This is a test.
使用上面的两个preg_replace语句,我得到:
Sample Output 1: This is a test.
Sample Output 2: This**is a test.
Sample Output 3: This**is a test.
我如何扫描连续空格的输入,计算它们并将该计数设置为变量以放置在preg_replace语句中多个空格?
或者还有另一种方法可以解决这个问题吗?
*注意:使用
进行替换可以保留额外的空格,但我不能用
替换空格。当我这样做时,打破输出中的自动换行,并在字符串永远不会结束时将字放在任何地方,并且只会在一个单词之前或之后换行。
答案 0 :(得分:2)
如果您想用单个空格替换多个空格,可以使用
$my_result = preg_replace('!\s+!', ' ', $text);
答案 1 :(得分:2)
您可以使用两个外观的替换来检查之前或之后是否有空格:
$text = preg_replace('~\s(?:(?=\s)|(?<=\s\s))~', '*', $text);
细节:
\s # a whitespace
(?:
(?=\s) # followed by 1 whitespace
| # OR
(?<=\s\s) # preceded by 2 whitespaces (including the previous)
)
答案 2 :(得分:1)
使用preg_replace_callback
计算找到的空格。
$text = 'This is a test.';
print preg_replace_callback('/ {1,}/',function($a){
return str_repeat('*',strlen($a[0]));
},$text);
结果:This**is*a*test.