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

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

4

3 回答 3

5

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
于 2012-12-02T13:11:36.633 回答
2

您需要quantifierdigits. underscore而且您实际上并不需要underscorecharacter class.

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

/^[0-9]+_[0-9]+$/
于 2012-12-02T12:57:43.043 回答
1

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

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

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

像这样简化你的模式:

/^\d+_\d+$/

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

/^_|\d+$/
于 2012-12-03T08:38:17.033 回答