我上一天正在尝试使用正则表达式,以下代码给了我一个意想不到的结果
<?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://'所以为什么首先打印空字符?
答案 0 :(得分:5)
/^(http:\/\/)?([^\/]+)/i
http://
是可选的,'not /
'不是。
因此,当它匹配它时,如果它首先应用可选规则,它将看到它无法匹配它,但如果应用一个或多个not /规则它可以匹配它。
换句话说,它匹配http:而不是http://,因为http:不是/.
array(3) {
[0]=>
string(5) "http:"
[1]=>
string(0) ""
[2]=>
string(5) "http:"
}