2017-08-30 5 views
0

J'ai une chaîne à venir qui est une chaîne de plusieurs lignes, en fonction de l'entrée le format est légèrement différentphp vérifier un caractère sur plusieurs lignes d'une chaîne

 1. Qatar 
2. Qatar 
3 . Cathay 
4. Qatar 
2 . British 
3. Qantas

Je veux la chaîne de sortie avoir le même format pour toutes les lignes:

 1 . Qatar 
2 . Qatar 
3 . Cathay 
4 . Qatar 
2 . British 
3 . Qantas

je peux faire vérifier la première ligne en utilisant

$fullstop = substr("$input", 2); //isolate character 2 



if (strpos($fullstop, '.') !== false) { //check is the character in pos 2 is a . 
$output = str_replace("."," .",$fullstop); //replace the full stop with space fullstop 
} 

Th fonctionne bien pour la première ligne, mais je veux que le code fasse la même chose pour toutes les lignes de code.

Des idées?

+0

Vos chaînes ci-dessus ont tous un caractère blanc (espace) avant le premier chiffre (par exemple "1. Quatar"). Est-ce une faute de frappe? – BeetleJuice

+1

il suffit de remplacer 'space-dot's et' dot's par 'space-dot', non? – mickmackusa

Répondre

0

strtr() travaillera pour remplacer les choses:

code: (Demo)

$string=' 
1. Qatar 
2. Qatar 
3 . Cathay 
4. Qatar 
2 . British 
3. Qantas'; 

var_export(strtr($string,[' .'=>' .','.'=>' .'])); 

Sortie:

' 
1 . Qatar 
2 . Qatar 
3 . Cathay 
4 . Qatar 
2 . British 
3 . Qantas' 

strtr() est une grande fonction pour cette tâche, car il remplace les matchs les plus longs premier et une fois qu'une sous-chaîne est remplacée, elle ne sera plus remplacée dans le même appel. Ce comportement est la raison pour laquelle un space-dot ne devient jamais un double-space-dot.


Ou preg_replace():

var_export(preg_replace('/\d+\K\./',' .',$string)); // digit then dot 
//       ^^--- restart fullstring match (no capture group needed) 

var_export(preg_replace('/(?<=\d)\./',' .',$string)); // dot preceded by a digit 

var_export(preg_replace('/(?<!)\./',' .',$string)); // dot not preceded by a space 

Ou str_replace():

var_export(str_replace(['.',' '],[' .',' '],$string)); 

Cela ajoute un espace supplémentaire avant chaque point, puis "nettoie" en convertissant les doubles espaces à simple les espaces.