Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/281.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php preg_match始终返回true/1_Php_Regex - Fatal编程技术网

Php preg_match始终返回true/1

Php 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设置为什么,它总是返回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 ) ) {
    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中有匹配项,它总是正确的