通过.net的正则
http://www.aa.bb.com
htp://aa.bb.com
aa.bb.com上面3个都得到 aa并对语句稍微讲解一下。谢谢。
(?<=http://)(\w+) 这个是我写的。不知道怎么加上或者匹配www
还有?<= 这个什么意思查不到。

解决方案 »

  1.   

    (?<=exp) 匹配exp后面的位置 
      

  2.   

    谢谢,参考。继续求答案通过.net的正则 
    http://www.aa.bb.com 
    htp://aa.bb.com 
    aa.bb.com 上面3个都得到 aa 
      

  3.   

    可以用string 的 Indexof解决。
      

  4.   

    (?<=http://(www\.)*)([^w]\w+)自己写了个。可以匹配前二个了。
    匹配www. 0次或多次的后面字符。但该字符。不包括 w 
    求更好答案。
      

  5.   

    晕哦。不行。会屏蔽w开头的子域名。为什么(www\.)*不是贪婪匹配啊?
      

  6.   

    htp://aa.bb.com 
    是不是少了一个t:
    http://aa.bb.com 
      

  7.   

    @"(?:http://)?(?:www\.)?(?<a>\w+)"// 捕获组 <a> 就是所求
      

  8.   

    new Regex(@"(?:http://)?(?:www\.)?(?<a>\w+)\.\w+\.", RegexOptions.Compiled);
    这样是不是没有问题?
      

  9.   

    也不行啊。
    www.xxx.cn
    会获得www
      

  10.   

    new Regex(@"(?:http://)?(?:www)?.?(?<a>\w+)\.\w+\.", RegexOptions.Compiled); 
      

  11.   

    ok...
     Regex re = new Regex(@"(?:http://)?(?:www)?\.?(?<a>\w+)..*", RegexOptions.Compiled);
      

  12.   

    string s1 = @"http://www.aa.bb.com";
                string s2 = @"http://aa.bb.com";
                string s3 = @"aa.bb.com";
                string s4 = @"www.xxx.cn";
                Regex re = new Regex(@"(?:http://)?(?:www)?\.?(?<a>\w+)..*", RegexOptions.Compiled);
                if (re.Match(s1).Success && re.Match(s2).Success && re.Match(s3).Success && re.Match(s4).Success)
                {
                    Console.WriteLine(re.Match(s1).Groups["a"].Value);
                    Console.WriteLine(re.Match(s2).Groups["a"].Value);
                    Console.WriteLine(re.Match(s3).Groups["a"].Value);
                    Console.WriteLine(re.Match(s4).Groups["a"].Value);
                }
    aa
    aa
    aa
    xxx
    请按任意键继续. . .
      

  13.   

    (?<=Expression)
    逆序肯定环视,表示所在位置左侧能够匹配Expression
     Match match = Regex.Match(uri, @"((http(s)?://)?)+[\w-.]+[^/]");//, RegexOptions.IgnoreCase
    string patten = @"^http://(www\.){0,1}.+\.(com|net|cn)$"; 
      

  14.   


    http://www.bb.cn获得的是bb。正确应该是空的。
      

  15.   

    http://www.bb.cn 
    www.xxx.cn
    有啥区别?
      

  16.   

    区别很大。
    www.aa.cn
    是一级域名。
    yyy.aa.cn
    是二级域名
    www这3个字母应该是不能作为二级域名的。
      

  17.   


    最后 一个是xxx。这种情况应该的得到空。我就可以知道用户进入的是主站。
      

  18.   

    try...string[] test = new string[] { "http://www.aa.bb.com", "http://aa.bb.com", "aa.bb.com", "http://www.bb.cn" };
    foreach (string s in test)
    {
        Match m = Regex.Match(s, @"(?i)(?<=^|http://(?:www\.)?)(?!www\.)\b\w+(?!\.\w+$)(?=(?:\.\w+))");
        if (m.Success)
        {
             richTextBox2.Text += "源字符串: " + s.PadRight(25, ' ') + "匹配结果: " + m.Value + "\n";
        }
        else
        {
             richTextBox2.Text += "源字符串: " + s.PadRight(25, ' ') + "匹配结果: 未匹配\n";
        }
    }
    //输出
    源字符串: http://www.aa.bb.com     匹配结果: aa
    源字符串: http://aa.bb.com         匹配结果: aa
    源字符串: aa.bb.com                匹配结果: aa
    源字符串: http://www.bb.cn         匹配结果: 未匹配
      

  19.   

    请解释下吧。
    应该有很多正则初学者。
     @"(?i)(?<=^|http://(?:www\.)?)(?!www\.)\b\w+(?!\.\w+$)(?=(?:\.\w+))");不是每个符号都能明白。请讲解。
      

  20.   


    先看下有没有不符合要求的吧
    刚看了下,虽然对目前的结果没影响,不过上面的正则是少了一个“+”的
    Match m = Regex.Match(s, @"(?i)(?<=^|http://(?:www\.)?)(?!www\.)\b\w+(?!\.\w+$)(?=(?:\.\w+)+)");解释的话会比较多,明天整理下再回吧,今天先睡了
      

  21.   

    (?i)(?<=^|http://(?:www\.)?)(?!www\.)\b\w+(?!\.\w+$)(?=(?:\.\w+)+)(?i) 匹配模式,表示忽略大小写,在.NET中等价于在后面加RegexOptions.IgnoreCase参数(?<=^|http://(?:www\.)?) 肯定逆序环视,语法(?<=Exp),最终匹配到的只是一个位置,相当于在所在位置的左侧附加了一个条件,表示所在位置左侧必须能够匹配Exp
    用在这里就表示左侧必须是字符串开始位置^,或者以http://(?:www\.)?开头,其中www.可有可无(?!www\.) 否定顺序环视,语法(?!Exp),同上,匹配的只是一个位置,相当于在所在位置的右侧附加一个条件,表示所在位置右侧必须不能匹配Exp
    用在这里是因为前面的www.是可有可无的,如果不加这个条件限定,那么最后一个例子
    http://www.bb.com
    将会匹配到www
    在正则表达式尝试匹配到http://后的位置时,条件(?<=^|http://(?:www\.)?)中www.是可有可无的,所以也是满足的,这样后面的\b\w+就会匹配到www.,所以要加(?!www\.)这样一个条件,使这个位置的右侧不能是www.\b\w+ \b单词边界,\w相当于[a-zA-Z0-9_]
    \b限定取到的内容是开始位置,或:,或.与.之间完整的内容,而不是部分子串
    还是最后的那个例了
    http://www.bb.com
    前面(?<=^|http://(?:www\.)?)(?!www\.)的条件限定,使得http://w以前的位置都不符合条件,在第一个w后的位置是满足以上条件的,如果这里不用\b限制,则\w+就可以匹配到ww,这个结果显然是错误的
    域名的通用规则是a-zA-Z0-9_组成,其实还有一个“-”,\w在.NET中如果没有加RegexOptions.ECMAScript参数,那么还可以匹配一些本地字符集,如中文,全角数字等,所以用在这里并不是很合适,可以把表达式中的\w替换为[a-zA-Z0-9_-](?!\.\w+$) 这个条件主要是用来限定右侧不能只有一个.com之类的域我,也就是要排除www.bb.com这种域名(?=(?:\.\w+)+) 这个条件主要是用来限定右侧要符合多个.\w+这样的规则,如果能保证传过来的参数符合域名规则,这个条件可以去掉关于环视,可以参考一下我的博客,目前只写了几篇,后续会陆续增加
    正则基础之——环视
      

  22.   

    非常感谢。暂不结帖.加分.顶.让初学者看看。
    多谢lxcnn的详细回帖子。
      

  23.   

    我怎么感觉有一个地方写错了呢?
    (?!\.\w+$) 这个条件主要是用来限定右侧不能只有一个.com之类的域我,也就是要排除www.bb.com这种域名
    这句话应该是排除类似于www.com这类的域名吧,而不是www.bb.com。
    因为\.\w+$就是说只出现一次.就结束了啊!还望您指点。