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.

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

报告相同问题?

悬赏问题

  • ¥15 南大pa1 小游戏没有界面,并且报了如下错误,尝试过换显卡驱动,但是好像不行
  • ¥15 没有证书,nginx怎么反向代理到只能接受https的公网网站
  • ¥50 成都蓉城足球俱乐部小程序抢票
  • ¥15 yolov7训练自己的数据集
  • ¥15 esp8266与51单片机连接问题(标签-单片机|关键词-串口)(相关搜索:51单片机|单片机|测试代码)
  • ¥15 电力市场出清matlab yalmip kkt 双层优化问题
  • ¥30 ros小车路径规划实现不了,如何解决?(操作系统-ubuntu)
  • ¥20 matlab yalmip kkt 双层优化问题
  • ¥15 如何在3D高斯飞溅的渲染的场景中获得一个可控的旋转物体
  • ¥88 实在没有想法,需要个思路