PHP:计算多个空间跨度中的空格数

时间:2017-03-14 17:12:58

标签: php count preg-replace space

我正在扫描表单字段条目($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语句中多个空格?

或者还有另一种方法可以解决这个问题吗?

*注意:使用 进行替换可以保留额外的空格,但我不能用 替换空格。当我这样做时,打破输出中的自动换行,并在字符串永远不会结束时将字放在任何地方,并且只会在一个单词之前或之后换行。

3 个答案:

答案 0 :(得分:2)

如果您想用单个空格替换多个空格,可以使用

$my_result =  preg_replace('!\s+!', ' ', $text);

答案 1 :(得分:2)

您可以使用两个外观的替换来检查之前或之后是否有空格:

$text = preg_replace('~\s(?:(?=\s)|(?<=\s\s))~', '*', $text);

demo

细节:

\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.