正则表达式在数字之间下划线

时间:2012-12-02 12:56:47

标签: php regex preg-match

<?php
    $string = '395095427174400_558374047513203';
    if(preg_match("/^[0-9][_][0-9]$/",$string)){
        echo "True";
    }else{
        echo "False";
    }
?>

为什么我的正则表达式不匹配并且数字之间有下划线?

3 个答案:

答案 0 :(得分:4)

您的regex确实匹配数字之间的下划线,只有一位数字。

/^[0-9][_][0-9]$/

^      # Start of line
[0-9]  # A single digit
[_]    # An underscore 
[0-9]  # A single digit 
$      # End of line

您想使用+来匹配一个或多个数字:

/^[0-9]+_[0-9]+$/

^       # Start of line
[0-9]+  # One or more digit
_       # An underscore 
[0-9]+  # One or more digit 
$       # End of line

答案 1 :(得分:2)

您需要使用quantifierdigits之前匹配更多underscore。而且您并不需要在underscore中使用character class

你可以试试这个正则表达式: -

/^[0-9]+_[0-9]+$/

答案 2 :(得分:1)

在您的模式中^$限制正则表达式引擎匹配整个字符串,并且_周围有多个数字,因此您的模式会失败。添加+ [0-9]将解决此问题,正如其他专家建议的那样:

/^[0-9]+_[0-9]+$/

此外,我不建议在使用数字时使用字符类,正则表达式引擎支持\d用于此目的。

简化你的模式:

/^\d+_\d+$/

另外,如果您非常确定下划线只能出现在数字之间(不是开始和结束),您可以更加简化它:

/^_|\d+$/