解析部分 html 字符串并隔离特定数字

发布于 2024-11-01 19:14:14 字数 254 浏览 4 评论 0原文

我需要从以下文本中获取页数:

<font size="1" color="blue" face="Verdana, Arial">Page 1 of 5 / 22 Records

我没有正则表达式的经验。因为我主要用 C 编程,所以我尝试了这个:

sscanf($result, "Page 1 of %d", $Npages);

但它不起作用。

I need to grab the number of pages from the following text:

<font size="1" color="blue" face="Verdana, Arial">Page 1 of 5 / 22 Records

I have no experience with regex. Since I mostly program in C, I tried this:

sscanf($result, "Page 1 of %d", $Npages);

But it doesn't work.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

高跟鞋的旋律 2024-11-08 19:14:14

你快到了。 PHP 的 sscanf 可以返回输出,也可以获取一个引用来填充解析的值。在您的代码中,您似乎正在尝试使用引用,但您没有这样指定它。 PHP 中的引用由变量名之前的 & 指定,因此您可以使用:

sscanf($result, "Page 1 of %d", &$npages);

或者,如果您不这样做,sscanf 将返回所有解析值的数组不通过引用传递任何变量:

$result = "Page 1 of 5 / 22 Records";
var_dump(sscanf($result, "Page %d of %d / %d Records"));
/*
array(3) {
  [0]=>
  int(1)
  [1]=>
  int(5)
  [2]=>
  int(22)
}
*/

然后您可以使用 list 将该数组分配给变量:

list($page, $npages, $nrecords) = sscanf($result, "Page %d of %d / %d Records");

You're almost there. PHP's sscanf can either return the output, or take a reference to fill with the parsed value. In your code, it looks like you're trying to use a reference, but you're not specifying it as such. A reference in PHP is specified by a & before the variable name, so you could have used:

sscanf($result, "Page 1 of %d", &$npages);

Alternately, sscanf will return an array of all parsed values if you don't pass any variables by reference:

$result = "Page 1 of 5 / 22 Records";
var_dump(sscanf($result, "Page %d of %d / %d Records"));
/*
array(3) {
  [0]=>
  int(1)
  [1]=>
  int(5)
  [2]=>
  int(22)
}
*/

You could then use list to assign that array to variables:

list($page, $npages, $nrecords) = sscanf($result, "Page %d of %d / %d Records");
风向决定发型 2024-11-08 19:14:14

尝试:

<?php
$str = '<font size="1" color="blue" face="Verdana, Arial">Page 1 of 5 / 22 Records';

if (preg_match('!Page.*?(\d+)\s+/.+Records!', $str, $matches)) {
    $pages = $matches[1];
    echo $pages;
}

Try:

<?php
$str = '<font size="1" color="blue" face="Verdana, Arial">Page 1 of 5 / 22 Records';

if (preg_match('!Page.*?(\d+)\s+/.+Records!', $str, $matches)) {
    $pages = $matches[1];
    echo $pages;
}
梦魇绽荼蘼 2024-11-08 19:14:14

这里:

#<font[^>]*>(.*)\/(.*) Records<\/font>#is

第二个数组元素将包含#。

巴里

Here:

#<font[^>]*>(.*)\/(.*) Records<\/font>#is

Second array element will have the #.

Barry

迷乱花海 2024-11-08 19:14:14

$str= 你的字符串;

preg_match('/第 \d+ 页,共 \d+ / (\d+) 条记录/', $str, $matches);

print_r($匹配);

$str= YOUT STRING;

preg_match('/Page \d+ of \d+ / (\d+) Records/', $str, $matches);

print_r($matches);

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文