2011-10-04 141 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可以是負數)