2010-02-21 7 views
1

i ont une longue chaîne qui peut contenir toutes ces valeurs en même temps:str_replace en php

hello<!>how are you? <!>I am fine<!> What is up? <!> Nothing! 

Je dois trouver tous ces posibilités:

' <!> ' 
' <!>' 
'<!> ' 
'<!>' 

et les remplacer par « \ n "

Est-ce que cela peut être réalisé avec str_replace en php?

Répondre

6

Si vous avez seulement ces 4 possibilités, oui, alors vous pouvez le faire avec str_replace.

$str = str_replace(array(' <!> ', ' <!>', '<!> ', '<!>'), "\n", $str); 

Ouais, mais s'il y a deux espaces? Ou un onglet? Ajoutez-vous un cas spatial pour chacun?

Vous pouvez ajouter des cas particuliers pour chacun de ceux-ci, ou utiliser des expressions régulières:

$str = preg_replace('/\s*<!>\s*/', "\n", $str); 
+0

c'est ça! Merci! – andufo

0

Modifier: preg_replace('/\s*<!>\s*', PHP_EOL, $string); devrait être mieux.

Bien sûr, str_replace('<!>', "\n", $string); si votre exemple est complet.

4

Bien sûr, vous pouvez réaliser ceci avec 4 appels au str_replace. Modifier: J'avais tort. Vous pouvez utiliser des tableaux dans str_replace.

$str = str_replace(' <!> ', "\n", $str); 
$str = str_replace(' <!>', "\n", $str); 
$str = str_replace('<!> ', "\n", $str); 
$str = str_replace('<!>', "\n", $str); 

Pensez également à utiliser strtr, qui permet de le faire en une seule étape.

$str = strtr($str, array(
    ' <!> ' => "\n", 
    ' <!>' => "\n", 
    '<!> ' => "\n", 
    '<!>' => "\n" 
)); 

Ou vous pouvez utiliser un regular expression

$str = preg_replace('/ ?<!> ?/', "\n", $str); 
+0

@codeholic: Vous n'avez pas besoin de 4 appels à str_replace. Et il voulait remplacer pour "\ n" –

+0

Oui. Tu as raison. – codeholic

1

Vous ne pouvez certainement le faire avec str_replace comme ceci:

$needles = array(" <!> ","<!> "," <!>","<!>"); 
$result = str_replace($needles,"\n",$text); 
+0

Oui, mais s'il y a deux espaces? Ou un onglet? Ajoutez-vous un cas spatial pour chacun? –

+1

@ e-satis: Les exigences sont claires. Si le PO ne signifie pas ce qu'il a demandé ou a manqué quelques détails, il devrait éditer la question. –

0

Vous ne pouvez pas le faire avec juste str_replace. Utilisez une combinaison de explode, strip et implode ou l'utilisateur preg_replace.

0

Vous pouvez utiliser:

//get lines in array 
$lines = explode("<!>", $string); 
//remove each lines' whitesapce 
for(i=0; $i<sizeof($lines); $i++){ 
    trim($lines[$i]); 
} 
//put it into one string 
$string = implode("\n", $lines) 

Il est un peu fastidieux, mais cela devrait fonctionner (supprime également deux espaces et onglets). (N'a pas tester le code, donc il pourrait y avoir des erreurs)

0

C'est un peu soignée:

$array = explode('<!>', $inputstring); 
foreach($array as &$stringpart) { 
    $stringpart = trim($stringpart); 
} 
$outputstring = implode("\r\n", $array);