代码:<?php
preg_match("/^(http:\/\/)?([^\/]+)/i",
   "http://www.php.net/index.html",$matches);$host=$matches[2];preg_match("/[^\.\/]+[^\.\/]+$/",$host,$matches);
echo "域名为:{$matches[0]}\n";
?>

问题:1、$matches参数究竟表示什么啊,$matches[0],$matches[1],$matches[2],分别表示什么?
书上说,$matches[0]将包含与整个模式匹配的文本,$matches[1]将包含与第一个捕获的括号中的子模式所匹配的文本,以此类推。看不懂是什么意思?能结合这个例子给解释一下吗?
2、/^(http:\/\/)?([^\/]+)/i匹配的http://www.php.net/index.html中的那一部分(http:\/\/)?([^\/]+)为什么会有括号,?+有分别匹配的什么?
3、同样/[^\.\/]+[^\.\/]+$/又匹配的什么?

解决方案 »

  1.   

    1./^(http:\/\/)?([^\/]+)/i 这里面一共有两对括号 $matches[1]匹配第一对 $matches[2]匹配第二对 如果有三对括号 匹配第三对就用$matches[3] 
    $matches[0]匹配符合整个正则的内容2.括号就是为了匹配局部 1已经说明了括号的作用 ?表示0次或者1次 +表示1次或者1次以上3.$host = "www.php.net"; /[^\.\/]+[^\.\/]+$/匹配后 得到net
    实际上这里/[^\.]+$/就可以匹配到net 其实就是获得最后一个点后面的内容
      

  2.   

    这个说难也难,说简单也简单。
    首先应该有一个好的调试正则的的工作 例如 match tracer .2 (http:\/\/)?([^\/]+) 这个要分开来理解.(http:\/\/)?  匹配 http:// 用了 ? 表示 0到1次
    例子中被匹配的字符为 http://([^\/]+)  匹配不是 /的字符
    例子中被匹配的字符为 www.php.net注意  / 由于是特殊字符 所以利用 \/ 来表示 \/.
    然后 ()内的内容将被捕获至 $matches 数组中去。
    matches[0] 为满足整个字符串的内容
    matches[n] 为满足第(n-1)个小括号中间的内容。这样第
    $matches[1] 为http://
    $matches[2] 为 www.php.net
      

  3.   

    UP一个matches[0] 为满足整个字符串的内容
    matches[n] 为满足第(n-1)个小括号中间的内容。
    具体正则表示什么,最好去学一下正则,很有用,开始可能有点难,上手后,不难。
      

  4.   

    有点不明白,为什么([^\/]+) 匹配不是 /的字符
    例子中被匹配的字符为 www.php.net
    应该匹配“/”才对啊。
      

  5.   

    有点不明白,为什么([^\/]+) 匹配不是 /的字符
    例子中被匹配的字符为 www.php.net应该匹配“/”才对啊。([^\/]+) 表示的不就是"/"
      

  6.   


    ([^\/]+) 是匹配不是 '/'的字符, www.php.net后面的字符是'/',所以,就匹配到这里.