XPath 正则表达式与 preg_match 结合

发布于 2024-12-07 23:15:59 字数 1519 浏览 0 评论 0原文

我的代码中有一个简单但不可见的(对我来说)错误。你能帮助我吗?

在我的 php 文件中使用此代码:

$location = $xpath2->query("//script")->item(1)->textContent; 

我得到(选择)此:

<script class="" type="text/javascript">
//<![CDATA[                                   
var html = '';                             
var lat  = 44.793530904744074;                                        
var lang = 20.5364727973938;                              

if (GBrowserIsCompatible())
{
    var map = new GMap2(document.getElementById("map_canvas"));
    var ct = new GLatLng(lat, lang);
    map.setCenter(ct, 15);
    map.addControl( new GSmallMapControl() );
    //map.addControl( new GHierarchicalMapTypeControl () );
    var gm=new GMarker(ct);
    if(html != '') {
        GEvent.addListener(gm, "click", function() {
            this.openInfoWindowHtml( html );
        });
    }
    map.addOverlay(gm);
    map.enableContinuousZoom();
    map.enableInfoWindow();
}
//]]>
</script>

然后我尝试使用此代码获取“lat”和“lang”:

$location = $xpath2->query("//script")->item(1)->textContent; 

preg_match('/var\s+lat\s+=\s+(\d+\.\d+)\s*;/', $location, $lat); 
preg_match('/var\s+lang\s+=\s+(\d+\.\d+)\s*;/', $location, $lng); 
$data['lat'] = $lat[1]; 
$data['lng'] = $lng[1];

但始终显示 latlang 是 00,而它们应该是 44.3453420.5345

请帮忙!你认为我错的地方(我的英语不是很好,对此感到抱歉)

I have a simple but invisible (for me) error in code. Can you help me?

With this code in my php file:

$location = $xpath2->query("//script")->item(1)->textContent; 

I got (select) this:

<script class="" type="text/javascript">
//<![CDATA[                                   
var html = '';                             
var lat  = 44.793530904744074;                                        
var lang = 20.5364727973938;                              

if (GBrowserIsCompatible())
{
    var map = new GMap2(document.getElementById("map_canvas"));
    var ct = new GLatLng(lat, lang);
    map.setCenter(ct, 15);
    map.addControl( new GSmallMapControl() );
    //map.addControl( new GHierarchicalMapTypeControl () );
    var gm=new GMarker(ct);
    if(html != '') {
        GEvent.addListener(gm, "click", function() {
            this.openInfoWindowHtml( html );
        });
    }
    map.addOverlay(gm);
    map.enableContinuousZoom();
    map.enableInfoWindow();
}
//]]>
</script>

Then I try to fetch 'lat' and 'lang' with this code:

$location = $xpath2->query("//script")->item(1)->textContent; 

preg_match('/var\s+lat\s+=\s+(\d+\.\d+)\s*;/', $location, $lat); 
preg_match('/var\s+lang\s+=\s+(\d+\.\d+)\s*;/', $location, $lng); 
$data['lat'] = $lat[1]; 
$data['lng'] = $lng[1];

But always show that lat and lang is 0, 0 when they should be 44.34534 and 20.5345.

PLEASE HELP! where you think that I'm wrong (my English is not very well, sorry for that)

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

〃安静 2024-12-14 23:15:59

也许像下面这样。尽管您正在尝试解析 JavaScript,但要小心。

preg_match('/(?:^|(?<=\s))var\s+lat \s* = \s* (?=[^;]*\d) ([+-]? \d*\.?\d*)\s*; /x', $location, $lat);
preg_match('/(?:^|(?<=\s))var\s+lang\s* = \s* (?=[^;]*\d) ([+-]? \d*\.?\d*)\s*; /x', $location, $lng);

运行示例: http://www.ideone.com/SEgVb

或者,尝试获取更多一般信息:

preg_match('/(?:^|(?<=\s))var\s+lat \s*=\s* ([^;]*) \s*; /x', ...

Maybe something like below. Beware though you're trying to parse JavaScript.

preg_match('/(?:^|(?<=\s))var\s+lat \s* = \s* (?=[^;]*\d) ([+-]?\d*\.?\d*)\s*; /x', $location, $lat);
preg_match('/(?:^|(?<=\s))var\s+lang\s* = \s* (?=[^;]*\d) ([+-]?\d*\.?\d*)\s*; /x', $location, $lng);

Run sample: http://www.ideone.com/SEgVb

Or, just try to get more general information:

preg_match('/(?:^|(?<=\s))var\s+lat \s*=\s* ([^;]*) \s*; /x', ...

一梦等七年七年为一梦 2024-12-14 23:15:59

尝试这样:

preg_match('/var\s+lat\s+=\s+([\d.-]+)/', $location, $lat); 
preg_match('/var\s+lang\s+=\s+([\d.-]+)/', $location, $lng);

[\d.-]+ 匹配任何带有数字的组。或 - (纬度/经度可以为负)

Try like this:

preg_match('/var\s+lat\s+=\s+([\d.-]+)/', $location, $lat); 
preg_match('/var\s+lang\s+=\s+([\d.-]+)/', $location, $lng);

The [\d.-]+ matches any group with numbers . or - (lat/lon can be negative)

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文