如何从html源页面获取数字?

时间:2015-12-22 23:56:24

标签: php regex

我试图在我的Instagram页面上检索后面的计数。我似乎无法正确使用正则表达式,并且非常感谢一些帮助。

以下是我要找的内容:

y":{"count":

这是字符串的开头,之后我想要4个数字。

$string = preg_replace("{y"\"count":([0-9]+)\}","",$code); 

有人建议这样做^但我无法正确格式化...

2 个答案:

答案 0 :(得分:2)

你还没有发布你的字符串,因此可以猜测正则表达式应该是什么......所以我会回答你的代码失败的原因。

preg_replace('"followed_by":{"count":\d')

这与正确的preg_replace用法相差甚远。你需要给它替换字符串和要搜索的字符串。见http://php.net/manual/en/function.preg-replace.php

您的第二次使用:

$string = preg_replace(/^y":{"count[0-9]/","",$code);

距离更近但preg_replace是全局的,所以这是搜索整个文件(如果不是锚的话,它会搜索)并且将替换找不到的值。你真正想要的(我认为)是使用preg_match

$string = preg_match('/y":\{"count(\d{4})/"', $code, $match);
$counted = $match[1];

这假设你的正则表达式已经正确了。

根据您的更新:

演示:https://regex101.com/r/aR2iU2/1

$code = 'y":{"count:1234';
$string = preg_match('/y":\{"count:(\d{4})/', $code, $match);
$counted = $match[1];
echo $counted;

PHP演示:https://eval.in/489436

我删除了^,这需要在字符串开头启动正则表达式,转义{并使\d长4个字符。 ()是一个捕获组,存储在其中找到的任何内容,在本例中为4个数字。

此外,如果这不仅仅是为了学习,您应该为此做好准备,以便在某些时候停止工作,因为服务提供商可能会更改格式。 API是一条更安全的路线。

答案 1 :(得分:0)

此正则表达式应该捕获您在第一组中寻找的值:

\{"count":([0-9]+)\}

将它与preg_match_all函数一起使用,可以轻松地将您想要的内容捕获到数组中(您使用的是preg_replace,而不是用于检索数据,而是用于...更换它)。

你的正则表达式无效,因为你没有转义大括号。而且你没有把计数量词(在我的例子中加号)所以它只会捕获第一个数字。