замените несколько пробелов неразрывными пробелами
Как заменить все пробелы, кроме первого (белого), на
, когда их больше одного?
Специально запросил для использования с php preg_replace
, поэтому PCRE.
"This is my text."
Следует преобразовать в
"This is my text."
3 ответа:
Похоже, все, что вам нужно, это заменить каждый пробел, который предшествует другому символу пробела. Используйте подход, основанный на поиске:
(?<=\s)\s
Смотрите демонстрацию регулярных выражений .
(?<=\s)
являетсяположительным lookbehind , который требует наличия пробела непосредственно перед текущим местоположением, но этот пробел не используется и, следовательно, не заменяется.Ниже находится PHP demo :
$s = "This is my text."; echo preg_replace('~(?<=\s)\s~', ' ', $s); // => This is my text.
Более одного пространства - это
>=2
<?php echo preg_replace("!\s{2,}!", " ", "Welcome to stack overflow");
Вывод:
Welcome to stack overflow
То, что вам нужно сделать, это использовать
Regex Lookahead & Lookbehind
Вот так:Вот так:
<?php echo preg_replace("/\s(?=\s+)|(?<=\s)\s/", " ", "Welcome to stack overflow");
Выходы
Welcome to stack overflow
Проверьте это здесь: https://regex101.com/r/DGraSS/1 - обеспечивает хорошие экспликации:)