douhao6271 2010-12-15 05:50
浏览 52
已采纳

PHP PCRE解析javascript代码

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?

  • 写回答

1条回答 默认 最新

  • drutcs7210 2010-12-15 06:09
    关注

    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.

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?