2010-05-28 5 views
4

Supposons que j'ai une chaîne comme cecomment remplacer certains caractères dans une chaîne?

SOMETHING [1000137c] SOMETHING = John Rogers III [SOMETHING] SOMETHING ELSE 

et je dois tourner dans cette

SOMETHING [1000137c] SOMETHING = John_Rogers_III [SOMETHING] SOMETHING ELSE 

ainsi tous j'ai besoin de remplacer les espaces par « _ » entre les mots après « [1000137c] CHOSE = " et avant " [". Comment puis-je faire cela en php?

Merci!

Répondre

3
$s = "SOMETHING [1000137c] SOMETHING = John Rogers III [SOMETHING] SOMETHING ELSE"; 
$a = split(" = ",$s,2); 
$b = split(' \[',$a[1],2); 
$s = $a[0] . ' = ' . strtr($b[0],' ','_') . ' [' . $b[1]; 

print_r($s); 

produit:

SOMETHING [1000137c] SOMETHING = John_Rogers_III [SOMETHING] SOMETHING ELSE 
+0

Merci, je vais essayer de le faire fonctionner. Seulement, il pourrait y avoir plus d'un "=" dans la chaîne. La seule chose que nous savons avec certitude, c'est que ce nom vient après "[1000137c] SOMETHING =", le 1000137c ne se répète pas. –

+0

cela fonctionnera s'il n'y a aucune sous-chaîne "=" _before_ celle mentionnée. tout va bien fonctionner s'ils sont après –

+0

hmm ... mais s'il y a "=" avant? –

0

$ arr = diviser une chaîne dans un tableau sur "=" puis

str_replace(" ", "_", $arr[1]) 
+0

J'aime beaucoup plus votre solution que celle ci-dessus :). – Younes

+3

cela va produire comme: John_Rogers_III_ [QUELQUE CHOSE] _SOMETHING_ELSE –

0

en utilisant une expression régulière comme si «/^ [\ w ] + [[\ w \ d] +] [\ w] + = ([\ w \ d] +) [[\ w \ d] +] [\ w] + $/i "devrait renvoyer le match 1 comme" John Rogers III ", bien que ce soit basé sur l'exemple actuel. En utilisant preg_replace_callback avec la regex ci-dessus, vous pouvez str_replace pour remplacer les espaces par des traits de soulignement dans la fonction de rappel.

Questions connexes