I'm trying to parse a javascript code that generates a map, so that I can get the coordinates that it's using (the first 2 long values inside the following example).
The example :
new OpenLayers.LonLat(-9.2009313718432200, 38.6318891148480000), 9);
The function I'm using is as follows :
preg_replace('/LonLat\(([0-9 ,\-\.^\)]{0,})\)/i', '$1', $coords);
Got no success so far. Any suggestions?
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.