1

我有一个以空格分隔的长字符串(从 txt 文件中读取)

输入字符串:

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

我想要做的,并且已经成功完成的是使用以下方法将此字符串分解为一个数组:

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

不幸的是,我还想在 GELE (>= <=) 部分和以下数字(在本例中为 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] => GELE (>= <=) 9.750

我在这里做了什么愚蠢的事情来使我的 str_replace 函数不起作用?

提前致谢。

4

3 回答 3

0

字符串后面的空格可能是制表符而不是空格。

首先尝试\t用空格替换制表符。

于 2011-03-07T12:06:55.447 回答
0

尝试:

preg_replace('/GELE\s*?\(>= <=\)(\s+)[0-9\.]*/', '  ', $value);
于 2011-03-07T12:12:46.513 回答
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
)

希望这可以帮助你...

阿卡

于 2011-03-07T12:29:51.500 回答