1

次の形式で返される一連の座標データがあります。

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

数字、スペース、コンマ、ハイフン、および単一の括弧以外のものを削除する正規表現を作成しようとして失敗しています。私は一生、二重括弧を削除する方法を理解することはできませんが、単一の括弧は削除しません。二重括弧を単一に置き換える必要はありません。削除するだけです。

これまでに思いついたのは次のとおりです。

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

しかし、これはすべてのブラケットを削除しますが、これは私が望んでいるものではありません。私は先読み/後読みアサーションを試してきましたが、うまくいかないようです...

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  )

編集: double を削除する(())、このコードを使用するには:

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