2011-10-03 112 views
0

我有这样的代码:Xpath的正则表达式和预浸匹配功能

<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; 

然后我试图让这个数字'44 .7958873,20.471077899999954' 用的preg_match :

preg_match('/.*loadMap([\d.,]+)<.*/', $string, $matches); 
list($lat, $lng) = explode(',', $matches[1]); 
$data['lat'] = $lat; 
$data['lng'] = $lng; 

但是代码中的某些东西我写错了。我不能看到错误。有人看到错误,因为在启动此代码$ data ['lat']之后是0,我也是 (我的英文不太好,对不起)

+0

欢迎来到SO。请修正你的问题的措辞,并看看如何写一个好问题的[FAQ](http://stackoverflow.com/faq)。例如,如果您对正则表达式或xpath有任何问题,将会很高兴。这听起来是你在一个问两个问题,请更具体,不要只是抛出问题。 – hakre

+0

对不起,我的问题是正则表达式。 – asdasdasd

+0

正则表达式的具体问题是什么?根据您的需求,您错过了什么来改变它?你能多写一点吗? – hakre

回答

0

而不是使用一个复杂的正则表达式,你可以使用一个更容易使用函数调用sscanf

$r = sscanf($str, "loadMap('%f,%f", $lat, $lng); 

它可以让你直接解析这两个浮点值转化为指定字符串变量(Demo) 。

+0

是的,它真的很有帮助 – asdasdasd

0

@script - 这是错误的。您正尝试获取名为script的属性,而不是标签。删除那个@

你的正则表达式也是错误的,因为它正在寻找像loadMap12.345,67.890<之类的东西。而不是尝试这个正则表达式:/loadMap\('([0-9.,]+)'\)/

这应该做到这一点。

+0

抱歉,但是:preg_match(“/ loadMap \('([0-9。,] +)'\)/”,$ string,$ matches); 也给0,0结果:( – asdasdasd

+1

可能想跳过RegEx期间...... – CD001

+0

你没有在'()'之前加反斜杠,请大家注意;) –