我在代码中有一个简单但不可见(对我而言)的错误。你能救我吗?
在我的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];
但始终显示lat
和lang
为0
,0
时应为44.34534
和20.5345
。
请帮助!在哪里你认为我错了(我的英语不是很好,对不起)
答案 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'
,...