我有这样的代码:
<div class="small_map_wrapper">
<script type="text/javascript">loadMap('44.7958873,20.471077899999954');</script>
我将获取该内容:
$string = $xpath->query("//div[@class='small_map_wrapper']/@script")->item(0)->textContent;
然后我尝试使用preg_match:
获取这些数字'44.7958873,20.47107789999999954 'preg_match('/.*loadMap(['d.,]+)<.*/', $string, $matches);
list($lat, $lng) = explode(',', $matches[1]);
$data['lat'] = $lat;
$data['lng'] = $lng;
但是我在代码里写错了。我看不出错误。有人看到错误,因为开始这个代码后$data['lat']是0,lng也是(我的英语不是很好,很抱歉)
不使用复杂的正则表达式,您可以使用一个更容易使用的函数sscanf
:
$r = sscanf($str, "loadMap('%f,%f", $lat, $lng);
它允许您直接将这两个浮点值解析为给定字符串(Demo)的变量。
@script
-这是错误的。您正在尝试获得一个名为script
的属性,而不是标签。移除@
你的正则表达式也是错误的,因为它正在寻找像loadMap12.345,67.890<
这样的东西。试试这个正则表达式:/loadMap'('([0-9.,]+)'')/
应该可以了