php正则表达式不返回匹配项

php正则表达式不返回匹配项,php,regex,preg-match,Php,Regex,Preg Match,我有一个非常简单的正则表达式设置 preg_match('/[0-9]*/', $item, $id); $item的字符串值为“” 当我打印($id)时,我得到一个空数组([0]=>) 我使用测试,它选择了我所期望的。它突出显示了数字29 我不明白为什么在PHP中它不能正确匹配。使用+而不是*,因为*将匹配零个实例。您需要一个或多个via+ preg_match('/[0-9]+/', $item, $id); print_r($id); Array ( [0] => 29

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

preg_match('/[0-9]*/', $item, $id);
$item的字符串值为“
  • 当我打印($id)时,我得到一个空数组([0]=>)

    我使用测试,它选择了我所期望的。它突出显示了数字29


    我不明白为什么在PHP中它不能正确匹配。

    使用
    +
    而不是
    *
    ,因为
    *
    将匹配零个实例。您需要一个或多个via
    +

    preg_match('/[0-9]+/', $item, $id);
    
    print_r($id);
    Array
    (
        [0] => 29
    )
    

    小心使用这个

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


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

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

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

    你的意思可能是:

    /[0-9]+/
    
    +
    表示您希望匹配一个或多个


    Regexpal将为您提供所有匹配项,而不仅仅是第一个匹配项。请参见使用
    preg\u match\u all
    :。

    不,0组是完整模式,您不需要显式地对其进行分组。您的模式将引入与0相同的组1(具有相同的子模式)。@hakre Correct。实际问题是正则表达式中的*而不是+@JakeChamberlain
    *
    表示“前面的零个或多个”<代码>+表示“前面的一个或多个”。因此,使用
    *
    会使它匹配所有内容,即使没有找到数字。感谢您的解释。我假设选择0-9多次。为什么它要在js测试仪上使用php?不客气,你可以在这里找到正则表达式的一个很好的介绍:-查找量词部分。为什么要小心?OP可能需要知道原因。:)