正则表达式PHP preg_match优先级

时间:2014-06-06 06:28:10

标签: php regex

我有这段代码

if (preg_match('/J[a-zA-Z0-9]+S/', $id)) {  
    echo "1";
}
else if (preg_match('/BUT[a-zA-Z0-9]+TN/', $id)) {  
    echo "2";
}

我的idBUTEqHLHxJSRr9DJZSMTN,而不是2作为输出,我得到1。 这是BUTEqHLHx JSRr9DJZS MTN,它使它与第一个表达式匹配。但是这个exp也有BUT / TN,它也应该与那个正则表达式相匹配吗?

有没有什么方法可以让我的正则表达式模式不会检查表达式中间的匹配,而是应该匹配开头和结尾。

我不知道这是否是一个愚蠢的问题要问,但无论如何有可能阻止pregmatch从开头匹配?

3 个答案:

答案 0 :(得分:3)

您可以使用^(字符串的开头),$(字符串结尾)锚点来匹配整个字符串。 例如,这将为您提供2的结果,了解它如何从开始到结束匹配整个字符串。

$id = 'BUTEqHLHxJSRr9DJZSMTN';

if (preg_match('/^J[a-zA-Z0-9]+S$/', $id)) { echo "1"; }
else if(preg_match('/^BUT[a-zA-Z0-9]+TN$/', $id)) { echo "2"; }

答案 1 :(得分:0)

使用字边界来避免匹配不需要的文字:

if(preg_match('/\bJ[a-zA-Z0-9]+S\b/', $id)) { 
    echo "1";
}
else if(preg_match('/\bBUT[a-zA-Z0-9]+TN\b/', $id)) {   
    echo "2";
}

答案 2 :(得分:0)

尝试^然后检查必须从给定的字符串

开始
   if(preg_match('/^J[a-zA-Z0-9]+S/', $id)) { 
        echo "1";
   }
   else if(preg_match('/^BUT[a-zA-Z0-9]+TN/', $id)) {   
        echo "2";
   }