Php preg_match始终返回true/1
对不起,如果这是一个愚蠢的问题,但我是新的正则表达式。出于某种原因,无论我将$id设置为什么,它总是返回truePhp preg_match始终返回true/1,php,regex,Php,Regex,对不起,如果这是一个愚蠢的问题,但我是新的正则表达式。出于某种原因,无论我将$id设置为什么,它总是返回true $id = "tt0944557"; if( preg_match( "/tt\\d{7}/", $id ) ) { echo "match"; } else { echo "no match"; } $id将始终以“tt”开头,然后是7个数字请尝试以下代码: $id = "tt0944557"; if( preg_match( "/(tt\d{7})/", $
$id = "tt0944557";
if( preg_match( "/tt\\d{7}/", $id ) ) {
echo "match";
} else {
echo "no match";
}
$id将始终以“tt”开头,然后是7个数字请尝试以下代码:
$id = "tt0944557";
if( preg_match( "/(tt\d{7})/", $id ) ) {
echo "match";
} else {
echo "no match";
}
我们需要关注的显然是模式,(tt\d{7}
括号的意思是组
,因为这是一个选择,所以整个事情就是一个组。下一部分是tt
,它们是文本。它在输入中查找文本字符串“tt”。下一部分是\d{7}
。\d
表示任何数字,{7}
在本例中正好表示#7。因此,它将字符串组成为tt######
我使用构建了此模式。此模式应能正确运行,在rubular.com上运行测试:
$id = "tt0944557";
正则表达式如下:
/^
从字符串开头开始匹配
tt
匹配前两个字符必须是tt
[0-9]
仅当下一个字符为0,1,2,3,4,5,6,7,8或9时匹配
{7}
必须正好是前面这些字符中的7个,所以是1111111、2232321,而不是123或332。{0,7}会说它可能是0,1,2,3,4,5,6或7长
$/
在此处停止匹配
if( preg_match( "/^tt[0-9]{7}$/", $id ) ) {
echo "match";
} else {
echo "no match";
}
您可以尝试
/(tt\d{7})/
首先它匹配2个t,然后匹配任何数字的7。tt0944557
是一个有效的输入,所以为什么它不返回true
?尝试“/^tt[0-9]{7}$/”您没有给出测试$id,但显然这与任何$id都不匹配,并且似乎像预期的那样工作:我对regex也很陌生,也很想知道,是什么让你的答案比我的好?或者它们基本上是一样的?此外,我不能让你的工作使用,我认为你错过了结束斜杠的模式。我还想说,我不是在敲你的答案,我有理由想了解更多关于你的答案和我的答案:)@GrumpyCrouton不,我在哪里说过更好?我只是提交了我的答案版本,一个可选的正则表达式匹配。使用完整表示法代替\d,因为我工作的地方\d允许任何数字,而[0-9]我也可以做[0-3],只允许0,1 2和3尽可能多的选项见公平:)谢谢,我自己在regex101上试过,但当我把它放到一个实时脚本中时,它总是正确的。如果你提供的ID中有匹配项,它总是正确的