例如我从这里得到数据响应: http://www.facebook.com/ajax/shares/view/?target_fbid=410558838979218&__a=1
有一种模式如下:
data-hovercard=\"\/ajax\/hovercard\/hovercard.php?id=655581307\">
我如何用PHP中的preg_match_all()解析它? 我知道我需要复杂的正则表达式,但我不知道如何在文本中为这样的模式编写一个。 谢谢你的帮助
UPD: 以下代码确实给出了id:
$str = 'hovercard.php?id=655581307';
preg_match_all('/[0-9]{9}/', $str , $matches);
print_r($matches);
BUT
这个不是
$url = 'http://www.facebook.com/ajax/shares/view/?target_fbid=410558838979218&__a=1';
$html = file_get_contents($url);
preg_match_all('/[0-9]{9}/', $html, $matches);
print_r($matches);
答案 0 :(得分:2)
由于反斜杠转义的东西,这有点乱,但为了完全匹配该字符串,这个调用preg_match_all()应该有效:
preg_match_all('#(data-hovercard=\\\\"\\\\/ajax\\\\/hovercard\\\\/hovercard.php\?id=[0-9]+\\\\">)#', $str, $matches);
这将为您提供您在$ matches中发布的整个字符串。但是,如果您只想要来自id的数字,则可以在其周围添加额外的括号:
preg_match_all('#(data-hovercard=\\\\"\\\\/ajax\\\\/hovercard\\\\/hovercard.php\?id=([0-9]+)\\\\">)#', $str, $matches);
数字将单独显示在$ matches中(类似地,您可以删除包装整个正则表达式的括号以停止匹配整个字符串。)
<强>更新强>
现在我看到问题已更新。如果您的新示例失败,那是因为您获得的数据中没有9位数的序列。当我尝试自己时,我只是得到一个回复,说我需要登录,所以也许你的匹配问题实际上是因为你没有得到你期望的数据?尝试转储$ html,看看你在寻找的是否实际存在。