我有以下格式的几个字符串:
S25 22.087 E152 46.125
S23 32.230 E148 10.576
S25 00.039 E152 12.480
S26 19.496 E152 43.501
我想解析字符串并将它们分成两部分,所以: $ foo ='S25 22.087 E152 46.125';
会变成:
$foo[0] = 'S25 22.087';
$foo[1] = 'E152 46.125';
(它不必在数组中,两个新变量也可以正常工作)。
如何做到这一点?我更喜欢使用正则表达式,而不是找到E的冒充并执行substr()
。
答案 0 :(得分:2)
S25 22.087 E152 46.125
看起来像是纬度和经度位置值。所以你也应该期待N25 22.087 W152 46.125
并且能够解析它。
$foo = 'S25 22.087 E152 46.125';
$matches = array();
if (preg_match('/^([NS].*)\s([EW].*)$/', $foo, $matches)) {
var_dump($matches); // $matches[1] = 'S25 22.087'; $matches[2] = 'E152 46.125'
}
答案 1 :(得分:1)
怎么样:
$foo = 'S25 22.087 E152 46.125';
$foo_parts = explode(' ', $foo);
$foo = array(implode(array($foo_parts[0], $foo_parts[1])), implode(array($foo_parts[2], $foo_parts[3])));
没有正则表达式:)
答案 2 :(得分:0)
这样的事情:
$foo = 'S25 22.087 E152 46.125';
$m = array();
if (preg_match('/^(.*?)(E.*)$/', $foo, $m)) {
var_dump($m);
}
这个想法,在这里,哟:
(当然,还有很多其他可能的方法可以做到这一点 - 例如,匹配第一部分除了E之外的所有内容)
哪个会帮到你:
array(3) {
[0]=>
string(22) "S25 22.087 E152 46.125"
[1]=>
string(11) "S25 22.087 "
[2]=>
string(11) "E152 46.125"
}
然后,您必须仅使用$m[1]
和$m[2]
。
注意:你还必须在两个琴弦上使用修剪,以确保每个琴弦的开头或末尾没有空格。
答案 3 :(得分:0)
试试这个正则表达式:
/(S\d+ [\d.]+) (E\d+ [\d.]+)/
答案 4 :(得分:0)
$foo = 'S25 22.087 E152 46.125';
preg_match_all('~[A-Z]\d+\s+[\d.]+~', $foo, $parts, PREG_SET_ORDER);
$parts = array_map('reset', $parts);
print_r($parts);
答案 5 :(得分:0)
如果所有这些行的长度和精度相同,只需这样做:
$line = 'S25 22.087 E152 46.125';
$posH = substr( $line, 0, 10 );
$posV = substr( $line, 11, 11 );
这应该比任何正则表达式方法都快。