XPath正则表达式与preg_match结合使用

时间:2011-10-04 21:44:52

标签: regex preg-match

我在代码中有一个简单但不可见(对我而言)的错误。你能救我吗?

在我的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];

但始终显示latlang00时应为44.3453420.5345

请帮助!在哪里你认为我错了(我的英语不是很好,对不起)

2 个答案:

答案 0 :(得分:0)

试试这样:

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

[\ d .-] +匹配任何带数字的组。或 - (lat / lon可以是负数)

答案 1 :(得分:0)

也许就像下面这样。请注意,虽然您正在尝试解析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',...