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

PHP:计算多个空间跨度中的空间数,php,count,preg-replace,space,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:

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

或者有没有另一种我显然不知道的方法


*注意:使用
替换可以维护额外的空间,但我不能用
替换空间。当我这样做时,它会打断输出中的换行符,并在换行符出现的任何地方打断单词,因为字符串永远不会结束,它只会在任何时候换行,而不是在单词之前或之后。

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

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

如果要将多个空间替换为单个空间,可以使用

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

使用
preg\u replace\u callback
对找到的空格进行计数

$text = 'This  is a test.';

print preg_replace_callback('/ {1,}/',function($a){
     return str_repeat('*',strlen($a[0]));
},$text);

结果:
这**是*a*测试。

使用
preg\u replace\u回调
计算找到的空格

$text = 'This  is a test.';

print preg_replace_callback('/ {1,}/',function($a){
     return str_repeat('*',strlen($a[0]));
},$text);

结果:
这**是一个*测试。

您可以使用两个查找框的交替选项来检查以下内容之前或之后是否有空格:

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

$text=preg\u replace('~\s(?:(?=\s)|)(?您可以使用带有两个查找框的替代项来检查以下内容之前或之后是否有空格:

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

$text=preg_replace('~\s(?:(?=\s)|)(?您的预期结果是什么?如果您试图删除单个的多个空格,那么
preg_匹配('/\s+/','','$string)
将用一个空格替换任意数量的空格。如果您试图保留多个空格以实际显示为多个空格,请将它们保留在中,并使用
标记(或css
空白
属性)保留空白。对于第一个问题,您可以使用
preg\u replace\u callback()
因此,如果您找到3个空格,您可以在回调中添加3*,您的预期结果是什么?如果您试图删除单个的多个空格,那么
preg_match('/\s+/','.$string)
将用一个空格替换任意数量的空格。如果您试图保留多个空格以实际显示为多个空格,请将它们保留在中,并使用
标记(或css
空白
属性)保留空白。对于第一个问题,您可以使用
preg\u replace\u callback()
因此,如果您找到3个空格,您可以在回拨中添加3*。谢谢。我在尝试使用nbsp和word wrap时仍然存在问题,但这是因为HTML正在折叠大的空白。这是另一个问题。这满足了我的需要。非常感谢。我在尝试使用nbsp和word wrap时仍然存在问题,但那是因为HTML只是在压缩巨大的空白。这是一个完全不同的问题。这让我得到了我所需要的。非常感谢。