замените несколько пробелов неразрывными пробелами


Как заменить все пробелы, кроме первого (белого), на  , когда их больше одного?

Специально запросил для использования с php preg_replace, поэтому PCRE.

"This is     my text."

Следует преобразовать в

"This is     my text."
3 3

3 ответа:

Похоже, все, что вам нужно, это заменить каждый пробел, который предшествует другому символу пробела. Используйте подход, основанный на поиске:

(?<=\s)\s

Смотрите демонстрацию регулярных выражений .

(?<=\s) являетсяположительным lookbehind , который требует наличия пробела непосредственно перед текущим местоположением, но этот пробел не используется и, следовательно, не заменяется.

Ниже находится PHP demo :

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

Более одного пространства - это >=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 - обеспечивает хорошие экспликации:)