preg_match总是返回true/1

问题描述:

对不起,如果这是一个愚蠢的问题,但我是新来的正则表达式。出于某种原因,无论我为其设置$ id,它总是返回true。preg_match总是返回true/1

$id = "tt0944557"; 

if(preg_match("/tt\\d{7}/", $id)) { 
    echo "match"; 
} else { 
    echo "no match"; 
} 

$ id将始终以 “TT”,然后开始7号

+0

你可以试试'/(TT \ d {7})/'首先匹配2 t,然后匹配任意数量的7。 – GrumpyCrouton

+0

'tt0944557'是一个有效的输入,所以它为什么不返回'true'? – anubhava

+1

尝试“/^tt [0-9] {7} $ /” – clearshot66

试试这个代码:

$id = "tt0944557"; 

if(preg_match("/(tt\d{7})/", $id)) { 
    echo "match"; 
} else { 
    echo "no match"; 
} 

,我们需要把重点放在什么明显的是模式,(tt\d{7})

括号的含义是group,因为这是一个选择,整个事情就是一个组。下一部分是tt,这些是文字。它在输入中找到文字字符串“tt”。接下来的部分是\d{7}\d意味着任何数字{7}意味着正好#在这种情况下,7.因此,它组成字符串为tt#######

我用regex101

+0

我在regex101上试过这个,但是当我把它放到一个活的脚本中时,它总是如此。 – Benwhittaker25

+0

那么它会一直如此,如果在你提供的ID匹配 – GrumpyCrouton

这应该正常工作建立了这个模式,适用于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"; 
} 
+0

我对于正则表达式也很新颖,并且很想知道,是什么让你成为比我更好的答案?或者它们基本相同?另外,我无法让你的工作使用[PHPTESTER](http://phptester.net/),我认为你错过了模式中的结尾斜杠。另外我想说,我不是在敲你的答案,我会合法地喜欢更多地了解你的答案vs我的:) – GrumpyCrouton

+0

@GrumpyCrouton不,我说哪里更好?我只是提交了我的答案的版本,一个替代正则表达式匹配。使用完全表示代替\ d,因为我工作的地方\ d将允许任何数字,其中[0-9]我也可以[0-3]只允许0,1,2和3作为可能的选项参见http:// rubular.com/r/Hnf2hRNZNp – clearshot66

+0

我告诉过你为什么大声笑 – clearshot66