?的含义:用于检查php的正则表达式

时间:2014-08-22 13:13:16

标签: php regex

<?php
if (!preg_match("{(?:login|logout|register)\.php$}", $_SERVER["PHP_SELF"]))
{    
    if (empty($_SESSION["id"]))
    {
        redirect("login.php");
    }

 }
?>

无法理解我的第一个if条件是如何检查login.php,logout.php,register.php以外的页面..什么?:正在做什么?

1 个答案:

答案 0 :(得分:0)

?:是non capturing group即,它匹配表达式但不捕获它。

  

非捕获括号将正则表达式分组,以便您可以应用正则表达式   运营商,但不捕捉任何东西。

例如:

如果我不想捕获http之类的协议,那么请参阅我将使用以下正则表达式

(?:http|ftp)://([^/\r\n]+)(/[^\r\n]*)?

现在,我的结果如下:

Match "http://google.com/"
     Group 1: "google.com"
     Group 2: "/"

Match "http://google.com/ABCD/XYZ/PQR"
     Group 1: "google.com"
     Group 2: "/ABCD/XYZ/PQR"