0

例如我有来自这里的数据响应: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);

这个没有

$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);
4

1 回答 1

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 以查看您要查找的内容是否确实存在。

于 2012-07-11T16:12:59.917 回答