Try a regex something like this:
preg_match('/LonLat\(([+-]?\d+(\.\d+)),\s*([+-]?\d+(\.\d+))/', $coords, $matches);
$longitude = $matches[1];
$latitude = $matches[3];
My PHP is a bit rusty so YMMV. Your expression for matching a floating point number is far more convoluted that it needs to be, just a simple "optional sign followed by some digits followed by a decimal point followed by some more digits" is sufficient:
[+-]?\d+(\.\d+)
And don't forget to skip $matches[2]
and $matches[4]
, those will contain the inner capture groups (i.e. ".20093137..." and ".6318891..." in your example).
And don't bother with preg_replace()
for things like this, you're just looking for things, you're not trying to change anything. You could use preg_replace()
but then you'd have to parse the post-replacement value again to get the two pieces out.