Preg_match帮助查找计数

时间:2010-06-27 14:51:21

标签: php regex preg-match pcre

全部 我有一个字符串

<font size="+1"><b>Open Directory Sites</b></font> (1-20 of 10000)<p>

我需要获得10000作为答案..我如何使用preg_match ???注意:匹配

的多次出现很重要

提前致谢

1 个答案:

答案 0 :(得分:3)

至少对于这种特殊情况,您可以使用'/\(\d+\-\d+ of (\d+)\)/'作为pattern

它匹配此({one-or-more-digits}-{one-or-more-digits} of {one-or-more-digits})之类的字符串,并将最后{one-or-more-digits}捕获到一个组中({} s仅为了清晰起见而添加...)。

$str = '<font size="+1"><b>Open Directory Sites</b></font> (1-20 of 10000)<p>';
$matches = array();
if (preg_match('/\(\d+\-\d+ of (\d+)\)/', $str, $matches))
{
    print_r($matches);
}

打印:

Array
(
    [0] => (1-20 of 10000)
    [1] => 10000
)

因此,您正在寻找的10000可以在$matches[1]访问。


评论后修改:如果您多次出现({one-or-more-digits}-{one-or-more-digits} of {one-or-more-digits}),则可以使用preg_match_all来捕获所有评论。我不确定这些数字本身在没有它们出现的上下文的情况下有多大用处,但是你可以这样做:

$str = '<font size="+1"><b>Open Directory Sites</b></font> (1-20 of 10000)<p>';
$str .= "\n$str\n";
echo $str;
$matches = array();
preg_match_all('/\(\d+\-\d+ of (\d+)\)/', $str, $matches);
print_r($matches);

打印:

<font size="+1"><b>Open Directory Sites</b></font> (1-20 of 10000)<p>
<font size="+1"><b>Open Directory Sites</b></font> (1-20 of 10000)<p>
Array
(
    [0] => Array
        (
            [0] => (1-20 of 10000)
            [1] => (1-20 of 10000)
        )

    [1] => Array
        (
            [0] => 10000
            [1] => 10000
        )

)

同样,你要找的是$matches[1],只是这次它是一个包含一个或多个实际值的数组。