正则表达式 - 字符串中的数字不是1

时间:2011-12-29 15:23:00

标签: php regex

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

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

我试过这个:

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

但它无法正常工作。

感谢你

4 个答案:

答案 0 :(得分:2)

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

匹配一位数字&gt; 1或任何多位数字。

请注意,这在以下情况下无法正确匹配:“第1页,共1页”

如果字符串已修复,最好使用:

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

或者如果字符串没有绝对修复,但您想要使用字符串中的第二个数字:

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

并使用第二个子匹配。 (当“第1页的第1页”时也会正确匹配。

答案 1 :(得分:1)

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

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

答案 2 :(得分:0)

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

/[^\D1]/

答案 3 :(得分:0)

<?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]; 
}
?>