用非破坏空格替换多个空格

时间:2017-03-29 09:17:43

标签: php html regex pcre

当多个空格时,如何用 替换除第一个(白色)空格以外的所有空格?

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

"This is     my text."

应转换为

"This is     my text."

3 个答案:

答案 0 :(得分:3)

您似乎只需要替换前面带有另一个空格符号的每个空格。使用基于lookbehind的方法:

(?<=\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.

答案 1 :(得分:1)

多个空格为>=2

PHP code demo

<?php

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

<强>输出:

Welcome to stack &nbsp;overflow

答案 2 :(得分:0)

您需要做的是使用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 - 提供良好的解释:)