我最后一天在试用regexps,下面的代码给了我一个意想不到的结果
<?php
// get host name from URL
if (preg_match("/^(http:\/\/)?([^\/]+)/i", "http://", $matches)) {
$host = $matches[1];
echo $host."<br/>";
}
else
echo "Not Found";
?>
Run Code Online (Sandbox Code Playgroud)
结果是一个空白行.任何人都可以解释为什么会这样吗?我期待它打印'http://',因为它是第一个匹配,正如我所料,匹配[0]打印'http://'所以为什么首先打印空字符?
/^(http:\/\/)?([^\/]+)/i
Run Code Online (Sandbox Code Playgroud)
http://是可选的,'not /'不是.
因此,当它匹配它时,如果它首先应用可选规则,它将看到它无法匹配它,但如果应用一个或多个not /规则它可以匹配它.
换句话说,它匹配http:而不是http://,因为http:不是/.
array(3) {
[0]=>
string(5) "http:"
[1]=>
string(0) ""
[2]=>
string(5) "http:"
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
52 次 |
| 最近记录: |