Php 仅将第一次出现的多个空格替换为新行

Php 仅将第一次出现的多个空格替换为新行,php,regex,preg-replace,Php,Regex,Preg Replace,可能重复: 我有一个字符串,如下所示: a quick brown fox jumps over a lazy dog 我希望结果是 a quick brown fox jumps over a lazy dog 希望仅将第一次出现的多个(多于1个)空格替换为换行符,但保留该换行符之后的其他多个空格不变 我怎样才能用preg_替换 谢谢使用的$limit仅替换一个事件 $string = preg_replace("/\s\s+/", "\n",

可能重复:

我有一个字符串,如下所示:

a     quick brown      fox jumps    over a lazy dog
我希望结果是

a
quick brown      fox jumps     over a lazy dog
希望仅将第一次出现的多个(多于1个)空格替换为换行符,但保留该换行符之后的其他多个空格不变

我怎样才能用preg_替换

谢谢

使用的
$limit
仅替换一个事件

$string = preg_replace("/\s\s+/", "\n", $string, 1); // \s\s+ to replace 2 or more
// Where  preg_replace($pattern, $replacement, $subject, $limit);
$limit每个主题字符串中每个模式的最大可能替换。默认值为-1(无限制)


从中,
preg_replace
的第四个参数是一个可选限制,用于限制模式应被替换的次数。

使用可选的第四个参数,设置模式的替换限制:

$str = preg_replace( "/\s{2,}/", PHP_EOL, $str, 1 );

演示:

您能解释一下原因吗?也许有更好的方法来解决这个问题。
\s+
将匹配一个空格字符(或多个)。@bfrohs发现得不错,更新了很多。工作起来很有魅力。
\s+
将匹配一个或多个空格字符(而不是“多个”)。@bfrohs细微的差别,但感谢您指出。@AlexLunix,事实上,这是不正确的(其他答案都是),但现在是:)(以前,我有
\s+
匹配
1个或多个
,但OP要求
超过1个
2个或多个
)谢谢,这也行。希望我能选择两个答案。
$str = preg_replace( "/\s{2,}/", PHP_EOL, $str, 1 );