正则表达式 - 来自字符串的数字,不是 1


Regex - number from string which is not 1

需要一个正则表达式来获取线程中的页数:

示例网址 : traidnt.net/vb/f25

我试过这个:

'~<td class="vbmenu_control" style="font-weight:normal">.*([2-9]{1}|[0-9]{2,}).*</td>~isU' 

但它行不通。

谢谢你

/.*?([0-9]{2,}|[2-9]{1}).*/s

匹配一位数> 1 或任何多位数数字。

请注意,在以下情况下,这不会正确匹配:"第 1 页,共 1 页">

如果字符串是固定的,你最好选择:

/page 'd+ of ('d+) pages/is

或者,如果字符串不是绝对固定的,但您想要字符串中的第二个数字,则可以使用:

/'D*('d+)'D*('d+)'D*/s

并使用第二个子匹配项。(当"第 1 页,共 1 页"时也会正确匹配。

您可以使用

'd+来匹配数字,并使用否定断言(?!...)排除某些内容。通常你需要一些锚点来使其可靠地工作,这里是单词边界:

/'b(?!1'b)'d+'b/

这将找到所有数字,这些数字不是一个:

/[^'D1]/
<?php
$str="page 1 of 200 pages";
$matches = array();
if (preg_match('/page ('d+) of ('d+)/', $str, $matches)) {
    echo $matches[2];
}
?>

对于更新的问题:

$url="traidnt.net/vb/f25";
$matches1 = array();
if (preg_match('/f('d+)/', $url, $matches1)) {
    echo $matches1[1]; 
}
?>