Php正则表达式:需要一些解释

时间:2012-01-31 07:15:56

标签: php regex

我上一天正在尝试使用正则表达式,以下代码给了我一个意想不到的结果

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

结果是一个空白行。任何人都可以解释为什么会这样吗?我期待它打印'http://',因为它是第一个匹配,正如我所料,匹配[0]打印'http://'所以为什么首先打印空字符?

1 个答案:

答案 0 :(得分:5)

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

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

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

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

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