Question Comment remplacer les tabulations par des espaces dans les variables de PHP?


$data contient des onglets, des espaces de début et des espaces multiples. Je souhaite remplacer tous les onglets par un espace. Plusieurs espaces avec un seul espace et supprimer les espaces de début.

En fait, quelque chose qui tournerait ces données d'entrée:

[    asdf asdf     asdf           asdf   ] 

Dans les données de sortie:

[asdf asdf asdf asdf]

Comment puis-je faire cela?


13
2017-07-25 08:10


origine


Réponses:


$data = trim(preg_replace('/\s+/g', '', $data));

14
2017-07-25 08:12



Découpez, remplacez les onglets et les espaces supplémentaires par des espaces simples:

$data = preg_replace('/[ ]{2,}|[\t]/', ' ', trim($data));

16
2017-07-25 08:29



En supposant que les crochets ne font pas partie de la chaîne et que vous les utilisez à des fins d’illustration, alors:

$new_string = trim(preg_replace('!\s+!', ' ', $old_string));

Vous pourrez peut-être le faire avec une seule regex, mais ce sera une regex assez compliquée. Ce qui précède est beaucoup plus simple.

Remarque: Je suis aussi en supposant que vous ne voulez pas remplacer « AB \ t \ tCD » (\ t est un onglet) avec « AB CD ».


3
2017-07-25 08:19



$new_data = preg_replace("/[\t\s]+/", " ", trim($data));

2
2017-07-25 08:22



$data = trim($data);

Cela élimine vos espaces de tête (et de fuite).

$pattern = '/\s+/';
$data = preg_replace($pattern, ' ', $data);

Cela transforme n'importe quelle collection d'un ou plusieurs espaces en un seul espace.

$data = str_replace("\t", " ", $data);

Cela se débarrasse de vos onglets.


1
2017-07-25 08:18



Cette réponse prend la question complètement littéralement: c'est seulement concerné par les espaces et les tabs. Certes, l'OP Probablement veut également inclure d'autres types d'espaces dans ce qui est coupé / compressé, mais prétendons qu'il veut préserver les CR et / ou LF.

Tout d'abord, mettons en place des constantes. Cela permettra à la fois la facilité de compréhension et la maintenabilité, si des modifications deviennent nécessaires. Je mets des espaces supplémentaires pour pouvoir comparer plus facilement les similitudes et les différences.

define( 'S', '[ \t]+'      ); # Stuff you want to compress; in this case ONLY spaces/tabs
define( 'L', '/\A'.S.'/'   ); # stuff on the Left edge will be trimmed
define( 'M',   '/'.S.'/'   ); # stuff in the Middle will be compressed
define( 'R',   '/'.S.'\Z/' ); # stuff on the Right edge will be trimmed
define( 'T', ' '           ); # what we want the stuff compressed To

Nous utilisons \A et \Z  caractères d'échappement pour spécifier le début et la fin du sujet, au lieu du type ^ et $ qui sont orientés ligne méta-caractères. Ce n’est pas tant parce qu’ils sont nécessaires dans ce cas autant que la programmation «défensive», si la valeur de S changer pour les rendre nécessaires dans le futur.

Maintenant pour la sauce secrète: nous allons profiter de certaines sémantiques spéciales de preg_replace, à savoir (soulignement ajouté)

S'il y a moins d'éléments dans le remplacement tableau que dans le tableau de motifs, tous les motifs supplémentaires seront remplacés par une chaîne vide.

function trim_press( $data ){
    return preg_replace( [ M, L, R ], [ T ], $data );
}

Donc, au lieu d'une chaîne de modèle et d'une chaîne de remplacement, nous utilisons un tableau de motifs et un tableau de remplacement, ce qui se traduit par des motifs supplémentaires. L et R être coupé


0
2017-10-03 22:36



Au cas où vous devez supprimer   aussi.

$data = trim(preg_replace('/\s+|nbsp;/g', '', $data));

0
2018-02-04 02:48



Il suffit d'utiliser cette regex

$str = trim(preg_replace('/\s\s+/', ' ', $str));

il remplacera tous les onglets et espaces par un espace,

signe ici + en regex signifie une ou plusieurs fois, modèle signifie que, partout où il y a deux ou plusieurs espaces, remplacez-le par un espace


-1
2017-11-02 15:04