Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/273.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何从html源页面获取数字?_Php_Regex - Fatal编程技术网

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

Php 如何从html源页面获取数字?,php,regex,Php,Regex,我正在尝试检索instagram页面上的计数。我似乎无法正确使用正则表达式,非常感谢您的帮助 以下是我想要的: y":{"count": 这是字符串的开头,我想要后面的4个数字 $string = preg_replace("{y"\"count":([0-9]+)\}","",$code); 有人建议这样做,但我无法正确设置格式…此regexp应捕获您在第一组中查找的值: \{"count":([0-9]+)\} 将其与preg\u match\u all函数一起使用,可以轻松地将所需

我正在尝试检索instagram页面上的计数。我似乎无法正确使用正则表达式,非常感谢您的帮助

以下是我想要的:

y":{"count":
这是字符串的开头,我想要后面的4个数字

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

有人建议这样做,但我无法正确设置格式…

此regexp应捕获您在第一组中查找的值:

\{"count":([0-9]+)\}
将其与
preg\u match\u all
函数一起使用,可以轻松地将所需内容捕获到数组中(您使用的
preg\u replace
不是用于检索数据,而是用于……很好地替换数据)

您的regexp无法工作,因为您没有逃过花括号。此外,您没有输入计数量词(在我的示例中为加号),因此它只会捕获第一个数字。

您还没有发布字符串,因此只能猜测正则表达式应该是什么。。。所以我会回答为什么你的密码会失败

preg_replace('"followed_by":{"count":\d')
这与正确的
preg\u replace
用法相差甚远。您需要为它提供替换字符串和要搜索的字符串。看

您的第二个用法:

$string = preg_replace(/^y":{"count[0-9]/","",$code);
更接近,但
preg_replace
是全局的,因此这将搜索整个文件(如果没有锚定,则会搜索),并将查找到的值替换为零。我想你真正想要的是使用
preg\u match

$string = preg_match('/y":\{"count(\d{4})/"', $code, $match);
$counted = $match[1];
这假设你的正则表达式已经有点正确了

根据您的更新:

演示:

PHP演示:

我删除了要求正则表达式从字符串开头开始的
^
,对
{
进行了转义,并将
\d
设置为4个字符长。
()
是一个捕获组,存储在其中找到的任何内容,在本例中是4个数字


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

有没有不使用的原因?我正在尝试练习我的正则表达式我要找的是以“y”开头的:{”“count”之后我需要4个数字。你知道下面的正则表达式不起作用吗?$string=preg_replace(/^y):{“count[0-9]/”,“,$code);
{4}
是前一个字符中的4个。你应该看看关于范围和量词的教程。
{
在你的正则表达式中也应该转义。你的
preg\u replace
用法也不正确,参数1是regex,2是replace value,3是string/haystack。我不确定你想在那里做什么。不过你可能想要
preg\u match
但是。你能发布一个示例字符串吗。我只是尝试了一下,但没有正确的格式?有什么想法吗?@你说的“格式化”是什么意思"?你得到了什么结果?是的,我主要是想学习正则表达式。你做得很好。感谢你在你的描述中解释正则表达式的所有元素。非常感谢:)祝你学习顺利,我建议你使用regex101.com,它可以让你测试正则表达式并给出解释。还可以查看和。还有最后一个注意事项查看mo修改器,这可能会影响正则表达式为什么对您有效/无效。嘿@chris85希望您能理解。我在过去的一个小时里一直在处理这个逃逸。“(\d+)views'这是我在preg_match中的第一个参数,但没有找到任何东西。我认为这与“”有关。我尝试了所有可能的转义组合…有什么想法吗?当我删除“”时,它可以找到一个数字,但当它在那里时就找不到了。你能发布你的实际正则表达式吗,是
/(\d+)视图/
?如果是这样,
需要是
,因为
/
是您的分隔符。
$code = 'y":{"count:1234';
$string = preg_match('/y":\{"count:(\d{4})/', $code, $match);
$counted = $match[1];
echo $counted;