2011-03-07 14 views
1

j'ai une longue chaîne qui est l'espace délimité (lu à partir d'un fichier txt)Php str_replace ne fonctionne pas

String Entrée:

$value = "TestNumber1 X Chan 1 Wrap Hi (5.0 V) (UNC) 9.860   V  GELE (>= <=) 9.750   10.250   Passed" 

Ce que je veux faire, et l'ont fait avec succès est exploser cette chaîne dans un tableau en utilisant:

$Exploded = explode(" ",$value); 

Unfortunatly cependant, je veux aussi séparer entre le GELE (> = < =) part, et le numéro suivant (dans ce cas 9,750), donc je pensais pour vous faciliter la tâche, avant d'exploser la chaîne que je vais faire:

$value = str_replace("GELE (>= <=) ","GELE (>= <=) ",$value); 

Le problème est, pour une raison quelconque le remplacer ne fonctionne pas. C'est comme si elle ne voyait pas l'aiguille. C'est ce que mon tableau de chaînes éclatées me donne après avoir fait le str_replace.

Array ([0] => TestNumber1 X Chan 1 Wrap Hi (5.0 V) (UNC) [1] => 9.860 [2] => V [3] => GELE (>= <=) 9.750 [4] => 10.250 [5] => Passed [6] =>) 

Comme vous pouvez le voir, l'élément [3] => GELE (> = < =) 9,750

Y at-il quelque chose de stupide que je fais ici pour faire ma fonction str_replace fonctionne pas?

Merci d'avance.

+2

d'abord supprimer tout '\ t'' \ n' '\ r' avec ''. puis exploser. et votre str_replace – Gaurav

+1

comme Gaurav dit, il suffit d'exécuter $ value = str_replace (array ("\ n", "\ t", "\ r"), "", $ value); avant de tenter de remplacer GELE – tacone

+0

C'est exactement ça! Merci les gars. Je ne suis pas sûr si c'était un n, t ou r provoquant le problème mais cela fonctionne. Merci les gars. –

Répondre

0

L'espace après la chaîne peut être un caractère de tabulation plutôt que des espaces.

Essayez d'abord de remplacer les onglets \t par des espaces.

0

essayer:

preg_replace('/GELE\s*?\(>= <=\)(\s+)[0-9\.]*/', ' ', $value); 
0

Vous pouvez également exploser votre chaîne en utilisant une expression régulière, en fonction de ce que vous voulez vraiment pour les données.

Si vous voulez extraire les numéros comme "9,860", "9.750" et "10.250" comme ceci:

$iReg = preg_match("/^.*UNC\)[\s|\t]*([0-9\.]*).*<=\)[\s|\t]*([0-9\.]*)[\s|\t]*([0-9\.]*)[\s|\t]*(.*)/i", $sData, $aData); 

echo "<p>iReg :".$iReg."</p>"; 
echo "<p><pre>".print_r($aData, true)."</pre></p>"; 

Ce retour de code ce résultat:

Array 
(
    [0] => TestNumber1 X Chan 1 Wrap Hi (5.0 V) (UNC) 9.860   V  GELE (>= <=) 9.750   10.250   Passed 
    [1] => 9.860 
    [2] => 9.750 
    [3] => 10.250 
    [4] => Passed 
) 

Hope this vous aider ..

Aka