PHP:将文件读入数组

时间:2014-07-11 15:01:11

标签: php regex

我有一个大的(~5MB)文本文件,其内容与此类似:

> -L"FIR ANTANANARIVO"
55.5000001034   -19.0053549236
55.5000001034   -10.0053549152
55.5000001034   -19.0053549236
> -L"FIR ANTOFAGASTA"
-69.76998889    -17.96612222
-69.95860556    -18.24945
-80.2033334761  -18.35000067
> -L"FIR ASHGABAT"
61.3850333  38.655
60.2866333  39.8950333
56.4517 40.055

为便于阅读,数据被缩短为三行。每个数据集可以超过~200行。

使用\> -L\".*\"作为匹配字符串只返回整行而不是引号中的部分。

所需的输出数组:

Array
(
    [0] => Array
        (
            [0] => FIR ANTANANARIVO
            [1] => 55.5000001034    -19.0053549236
            [2] => 55.5000001034    -10.0053549152
            [3] => 55.5000001034    -19.0053549236
        )
    [1] => Array
        (
            [0] => FIR ANTOFAGASTA
            [1] => -69.76998889 -17.96612222
            [2] => -69.95860556 -18.24945
            [3] => -80.2033334761   -18.35000067
        )
    [2] => Array
        (
            [0] => FIR ASHGABAT
            [1] => 61.3850333   38.655
            [2] => 60.2866333   39.8950333
            [3] => 56.4517  40.055
        )
)

这是我目前正在使用的代码:

$firs = file_get_contents('data/firs.txt');
preg_match_all("/^\> -L\".*\"?(?=\n\>|\z)", $firs, $treffer);
print_r($treffer);

1 个答案:

答案 0 :(得分:0)

  

返回整行,不是引号中的部分

您可能会忘记将其分组。从索引1的匹配组中获取。

\> -L\"(.*)\"

Online demo


尝试使用 Positive Lookbehind Positive Lookahind 。在这种情况下,没有必要从群体中捕获它。

(?<=\> -L\").*(?=\")

Online demo


从索引1获取匹配组中的所有所需值。

 ((?<=\> -L\").*(?=\")|^-?\d.*$)

Online demo