2011-10-04 139 views
0

我有一个简单但不可见的(对我来说)代码错误。你可以帮我吗?XPath正则表达式结合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' 和 '语言':

$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

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

+0

确定'lang'拼写正确 –

+0

是我”?当然,因为我复制该代码。100%是'lang' – asdasdasd

回答

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',...

0

尝试这样的:

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

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