俺想把某个网页中的所有url和email都找出来,想到的方法是先得到网页的源程序,然后用正则表达式去匹配,但是在网上找了好多正则表达式,实际使用中都有些问题:现在正在使用的url正则表达式:"(https?|ftp|file)://[-A-Z0-9+&@#/%?=~_|!:,.;]*[-A-Z0-9+&@#/%=~_|]";
但是实际使用中,比方http://www.baidu.com/s?bs=%BA%AB%D1%A9&f=8&wd=%BA%AB%D1%A9+%C6%AF%C1%C1这个网页中少找了好多url正在使用的email正则表达式:"\\w+([-+.]\\w+)*@\\w+([-.]\\w+)*\\.\\w+([-.]\\w+)*";
实际使用中发现这个表达式不能排除中文的文字,比方说用这个表达式找出了带中文的邮箱"有问题交流[email protected]
",如何改才能把"有问题交流"这几个字给去了??

解决方案 »

  1.   

    你所要求的两个正则,没有哪一个规格是固化的,需要你自己明确规则,否则取出来的就不会符合你的需求你自己给的正则说是少取了很多url,因为它只取了http/https/ftp/file开头的链接,下面的正则,很有可能你又会说取得太多了,所以还是要求你自己明确规则,哪些要取,哪些不取,各有什么规律可循
    Regex reg = new Regex(@"(?is)<a[^>]*?href=(['""]?)(?<url>[^'""\s>]+)\1[^>]*>(?<text>.*?)</a>");
    MatchCollection mc = reg.Matches(yourStr);
    foreach (Match m in mc)
    {
        richTextBox2.Text += m.Groups["url"].Value + "\n";      //链接
        //richTextBox2.Text += m.Groups["text"].Value + "\n";     //文本
    }email的正则,由于.NET中\w可以匹配中文,所以要加一个RegexOptions.ECMAScript参数
    Regex reg = new Regex("\\w+([-+.]\\w+)*@\\w+([-.]\\w+)*\\.\\w+([-.]\\w+)*", RegexOptions.ECMAScript);