1

我有一堆坐标数据以下列格式返回:

TYPE ((lat long, lat long), (lat long, lat long), (lat long))

我正在尝试创建一个将删除除数字、空格、逗号、连字符和单括号之外的任何内容的正则表达式,但失败了;我一生无法弄清楚如何删除双括号而不是单括号。我不需要用单引号替换双括号,只需将它们删除即可。

到目前为止,我想出的是:

preg_replace('/[^0-9,.-\s\(\)]/', '', $val);

但这会删除所有括号,这不是我想要的,因为我必须根据这些括号对它进行explode()。我一直在尝试使用前瞻/后瞻断言,但似乎不太正确......

4

1 回答 1

0

在不使用任何前瞻的情况下,您可以使用它:

$s = 'TYPE ((lat long, lat long 234), (lat long, 999 lat long), (0 lat long))';
$r=preg_replace(array('/\(\s*\(/', '/\)\s*\)/', '/[^\d,.\s-()]/'), array('(', ')', ''), $s);
//=>  ( ,   234), ( , 999  ), (0  )

编辑:要删除双重(())使用此代码:

$r = preg_replace('/\(\s*\(|\)\s*\)|[^\d,.\s-()]/', '', $s);
于 2013-09-16T02:29:51.190 回答