2011-03-07 70 views
1

我還有很長的字符串,它是分隔空間(從一個txt文件中讀取)PHP的str_replace函數不工作

輸入字符串:

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

我想做什麼,並已成功完成使用被爆炸這個字符串轉換成數組:

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

不幸的是,雖然,我也希望格勒之間單獨的(> = < =)部分,和下面的數(在本例9.750),所以我想爲了使用方便,我才爆炸的字符串我會做:

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

的問題是,由於某種原因,替代無法正常工作。就好像它沒有看到針。這是我的爆炸字符串數組在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] =>) 

正如你所看到的,元素[3] =>歌樂山(> = < =)9.750

有任何愚蠢的事我在這裏做讓我str_replace函數功能無法正常工作?

在此先感謝。

+2

首先刪除所有'\'t' \ N''\ r'與 ''。然後爆炸。和你的str_replace – Gaurav 2011-03-07 12:10:00

+1

像Gaurav說的,只需運行$ value = str_replace(array(「\ n」,「\ t」,「\ r」),「」,$ value);在試圖取代GELE之前 – tacone 2011-03-07 12:22:11

+0

這就是它!多謝你們。我不確定這是否是導致問題的n,t或r,但它起作用。謝謝你們。 – 2011-03-07 12:25:46

回答

0

字符串後面的空格可能是製表符而不是空格。

嘗試先用空格替換標籤\t

0

嘗試:

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

您還可以使用正則表達式,這取決於你真正想要的數據爆炸的字符串。

如果你想提取號碼,如 「9.860」, 「9.750」 和 「10.250」 是這樣的:

$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>"; 

此代碼返回這樣的結果:

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 
) 

希望這有助於你.. 。

阿卡