用不间断空格替换多个空格

replace multiple spaces by non breaking spaces

当超过一个 space 时,如何用   替换除第一个(白色)space 之外的所有内容?

特别要求与 php 的 preg_replace 一起使用,所以 PCRE。

"This is     my text."

应该转换成

"This is     my text."

不止一个space是>=2

PHP code demo

<?php

echo preg_replace("!\s{2,}!", " &nbsp;", "Welcome to stack  overflow");

输出:

Welcome to stack &nbsp;overflow

您需要做的是像这样使用 Regex Lookahead & Lookbehind

像这样:

<?php
echo preg_replace("/\s(?=\s+)|(?<=\s)\s/", "&nbsp;", "Welcome to stack       overflow");

产出

Welcome to stack&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;overflow

在这里测试:https://regex101.com/r/DGraSS/1 - 提供了很好的解释:)

看来您只需要替换前面有另一个空白符号的每个空白即可。使用基于回顾的方法:

(?<=\s)\s

参见regex demo

(?<=\s) 是一个正向回顾,它要求在当前位置之前立即出现一个空格,但空格不会被消耗,因此不会被替换.

下面是PHP demo:

$s = "This is     my text.";
echo preg_replace('~(?<=\s)\s~', '&nbsp;', $s);
// => This is &nbsp;&nbsp;&nbsp;&nbsp;my text.