<?php
$string = '395095427174400_558374047513203';
if(preg_match("/^[0-9][_][0-9]$/",$string)){
echo "True";
}else{
echo "False";
}
?>
为什么我的正则表达式不匹配并且数字之间有下划线?
答案 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)
您需要使用quantifier
在digits
之前匹配更多underscore
。而且您并不需要在underscore
中使用character class
。
你可以试试这个正则表达式: -
/^[0-9]+_[0-9]+$/
答案 2 :(得分:1)
在您的模式中^
和$
限制正则表达式引擎匹配整个字符串,并且_
周围有多个数字,因此您的模式会失败。添加+
[0-9]
将解决此问题,正如其他专家建议的那样:
/^[0-9]+_[0-9]+$/
此外,我不建议在使用数字时使用字符类,正则表达式引擎支持\d
用于此目的。
简化你的模式:
/^\d+_\d+$/
另外,如果您非常确定下划线只能出现在数字之间(不是开始和结束),您可以更加简化它:
/^_|\d+$/