php正则表达式不返回匹配

时间:2011-11-17 17:50:09

标签: php regex preg-match

我有一个非常简单的正则表达式设置。

preg_match('/[0-9]*/', $item, $id);

$ item的字符串值为“<li class="page_item page-item-29 current_page_item"><a href="http://dcdc.siretesting.com/programs/child-care/" title="Child Care">Child Care</a></li>

当我print_r($id)时,我得到一个空数组数组([0] =&gt;)

我使用http://regexpal.com/进行了测试,并按照我的预期进行选择。它突出了29号

我无法弄清楚为什么在PHP中它没有正确匹配。

3 个答案:

答案 0 :(得分:2)

你可能被你的模式误导了:

/[0-9]*/

*信号表示您要匹配零个或多个字符。 preg_match执行此操作,它成功找到字符类[0-9]的零并返回空字符串。

你的意思是:

/[0-9]+/

+表示您要与一个或多个匹配的信号。

Regexpal将为您提供所有比赛,而不仅仅是第一场比赛。请参阅preg_match_allDemo

答案 1 :(得分:1)

请谨慎使用......

if (preg_match('/\d+/', $subject, $regs)) {
    $result = $regs[0];
}

编辑:

请谨慎使用,因为\ d +只会匹配主题字符串中任意位置的第一个数字序列。所以是的,使用起来不太安全。

答案 2 :(得分:0)

使用+代替*,因为*将匹配零个实例。您需要+一个或多个。

preg_match('/[0-9]+/', $item, $id);

print_r($id);
Array
(
    [0] => 29
)
相关问题