我上一天在试用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:"
}