個正則表達式是非常強大的,當涉及到匹配和分離文本序列:
簡單的方法,如果你不知道事先列數:
<?php
$input = <<<EOT
10.09.16 0:05 16.7 16.8 16.7 70 11.2 3.2 ENE 0.27 6.4 ENE 16.7 16.4 16.4 --- 946.9 0.00 0.0 0 0.00 0 0.0 0.00 0.0 0.006 0.000
10.09.16 0:10 16.7 16.8 16.7 70 11.2 4.8 E 0.40 6.4 E 16.7 16.4 16.4 --- 946.8 0.00 0.0 0 0.00 0 0.0 0.00 0.0 0.006 0.000
EOT;
$output = [];
foreach(explode("\n", $input) as $subject) {
if (trim($subject)) {
preg_match_all('/(?:([^\s]+)\s+)+/uU', $subject, $tokens);
$output[] = $tokens[1];
}
}
var_dump($output);
更優雅的方法,如果你做知道列數提前:
<?php
$input = <<<EOT
10.09.16 0:05 16.7 16.8 16.7 70 11.2 3.2 ENE 0.27 6.4 ENE 16.7 16.4 16.4 --- 946.9 0.00 0.0 0 0.00 0 0.0 0.00 0.0 0.006 0.000
10.09.16 0:10 16.7 16.8 16.7 70 11.2 4.8 E 0.40 6.4 E 16.7 16.4 16.4 --- 946.8 0.00 0.0 0 0.00 0 0.0 0.00 0.0 0.006 0.000
EOT;
preg_match_all('/(?:([^\s]+)\s+)+/uUm', $input, $output);
$output = array_chunk($output[1], 39);
var_dump($output);
爲了降低複雜性,我聲明瞭輸入文本內聯,您可以改爲從文件中讀取它。
這兩種方法都將單獨產生相同的輸出這些行:
array(2) {
[0] =>
array(39) {
[0] =>
string(8) "10.09.16"
[1] =>
string(4) "0:05"
[2] =>
...
[37] =>
string(5) "100.0"
[38] =>
string(1) "5"
}
[1] =>
array(39) {
[0] =>
string(8) "10.09.16"
[1] =>
string(4) "0:10"
[2] =>
...
[37] =>
string(5) "100.0"
[38] =>
string(1) "5"
}
}
哦,孩子,你需要一些正則表達式的工作。 – Phiter
爲什麼不能簡單地使用正則表達式來按空格拆分行? – arkascha
請[編輯]你的問題,以顯示[你到目前爲止已經嘗試](http://whathaveyoutried.com)。您應該包含您遇到問題的代碼[mcve],然後我們可以嘗試幫助解決特定問題。你還應該閱讀[問]。 –