关于手册中的这个正则,很不理解

tianyaxiao 2006-08-26 11:39:26
<?php
// 从 URL 中取得主机名
preg_match("/^(http:\/\/)?([^\/]+)/i",
"http://www.php.net/index.html", $matches);
$host = $matches[2];

// 从主机名中取得后面两段
preg_match("/[^\.\/]+\.[^\.\/]+$/", $host, $matches);
echo "domain name is: {$matches[0]}\n";
?>

大家注意第一个正则中的那个问号,按说明它匹配的应该是0个或一个前导表达式,但是在这里很显然是用来匹配www.php.net,我觉得是不是应该改成".+"才对????
...全文
166 7 打赏 收藏 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
helloyou0 2006-08-26
  • 打赏
  • 举报
回复
^(http:\/\/)? => http://
([^\/]+) => www.php.net
张吉Jerry 2006-08-26
  • 打赏
  • 举报
回复
([^\/]+)的意思是除/之外的任何字符,用来匹配www.php.net的,至于后面的/index.html压根没被PHP瞧上一眼,因为preg_match()只要找到一个匹配就停止了。
ImN1 2006-08-26
  • 打赏
  • 举报
回复
试一下把0改成+匹配这个:

"www.php.net/index.html"
iasky 2006-08-26
  • 打赏
  • 举报
回复
那个问号是说前面的括号中的可能没有,就是说http://可能没有
SysTem128 2006-08-26
  • 打赏
  • 举报
回复
("/^(http:\/\/)?([^\/]+)/

1 ^(http:\/\/)?这个表示以http://开头(可有可无)
2 ([^\/]+)这个表示匹配除过/的所有字符 至少匹配一次.
2放在1后面明白是什么意思不?

^放在 []里是除过后面字符的意思.
放[]外才是开头的意思.
marsrandy 2006-08-26
  • 打赏
  • 举报
回复
([^\/]+) 表示除 / 以外的字符
tianyaxiao 2006-08-26
  • 打赏
  • 举报
回复
([^\/]+) => www.php.net
------------------------------------
我太笨,不理解。
这个不是用来匹配“/index.html”的吗?

21,889

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧