个正则表达式是非常强大的,当涉及到匹配和分离文本序列:
简单的方法,如果你不知道事先列数:
<?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],然后我们可以尝试帮助解决特定问题。你还应该阅读[问]。 –