我有一个大的(~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);
答案 0 :(得分:0)
返回整行,不是引号中的部分。
您可能会忘记将其分组。从索引1的匹配组中获取。
\> -L\"(.*)\"
尝试使用 Positive Lookbehind 和 Positive Lookahind 。在这种情况下,没有必要从群体中捕获它。
(?<=\> -L\").*(?=\")
从索引1获取匹配组中的所有所需值。
((?<=\> -L\").*(?=\")|^-?\d.*$)