Php-regexp:需要一些解释


Php regexp: need some explanation

我上一天在试用regexp,下面的代码给了我一个意想不到的结果

<?php
// get host name from URL
if (preg_match("/^(http:'/'/)?([^'/]+)/i", "http://", $matches)) {
    $host = $matches[1];
    echo $host."<br/>";
}
else
    echo "Not Found";
?>

结果是一行空白。有人能解释为什么会这样吗?我原以为它会打印"http://",因为这是第一个匹配项,正如我所料,matches[0]确实会打印"http://",那么为什么要先打印null字符呢?

/^(http:'/'/)?([^'/]+)/i

http://是可选的,而'not /'不是。

因此,当它去匹配它时,如果它首先应用可选规则,它将看到它无法匹配它,但如果应用一个或多个not/规则,它可以匹配它。

换句话说,它匹配的是http:而不是http://,因为http:不是/。

array(3) {
  [0]=>
  string(5) "http:"
  [1]=>
  string(0) ""
  [2]=>
  string(5) "http:"
}