2017-03-29 2 views
3

Comment remplacer tous les espaces sauf les premiers espaces (blancs) par   lorsqu'il y a plusieurs espaces?Remplacer des espaces multiples par des espaces sans rupture

Spécifiquement demandé pour une utilisation avec php preg_replace, donc PCRE.

"This is  my text." 

doit être converti en

"This is     my text." 
+1

'Essayez preg_replace (" ", $ text "s \ +!");'. Pourriez-vous s'il vous plaît fournir un exemple? –

+0

Peut-être, vous voulez 'preg_replace ("! \ S {2,}! ","   ", $ texte);' –

+0

@ WiktorStribiżew Exemple fourni dans la question ci-dessus. – toshniba

Répondre

2

Il semble tout ce dont vous avez besoin est de remplacer chaque espace précédé d'un autre symbole d'espace. Utiliser une approche basée sur lookbehind-:

(?<=\s)\s 

Voir la regex demo.

Le (?<=\s) est un positif lookbehind qui nécessite la présence d'espaces blancs immédiatement avant l'emplacement actuel, mais les espaces blancs n'est pas consommé, et est donc pas remplacé.

Voici une PHP demo:

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

Plus d'un espace est >=2

PHP code demo

<?php 

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

Sortie:

Welcome to stack &nbsp;overflow 
+0

Il est possible que OP ne veuille pas l'espace avant ' ', et le remplacement devrait être '"   "' (sans l'espace initial). –

0

Ce que vous devez faire est d'utiliser Regex Lookahead & Lookbehind comme ceci:

comme ceci:

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

Sorties

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

test ici: https://regex101.com/r/DGraSS/1 - donne de bons :) explications

+0

C'est presque ce dont j'ai besoin, mais je reçois un ' ' supplémentaire (par exemple 5 quand il y a seulement 4 espaces, 9 en ayant 8) Et il serait plus agréable de garder le premier espace tel quel ("Welcome to stack    ) pour autoriser les ruptures avant – toshniba

+0

Je viens de tester à nouveau sous php 7.x et le nombre d'espaces est égal au nombre de 'nbsp' sortis. – aifrim