代码改变世界

正则表达式提取案例1

2012-08-15 18:08  C#与.NET探索者  阅读(275)  评论(0编辑  收藏  举报

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
using System.Net;
using System.IO;

namespace 贪婪模式练习
{
    class Program
    {
        static void Main(string[] args)
        {

            #region 贪婪模式

            //string msg = "1111。11。111。111111。";

            ////当使用限定符的时候,如果没有明确指定,则默认按照贪婪模式来匹配
            ////按照能匹配正则表达式的最多的字符串去匹配。
            //Match match = Regex.Match(msg, ".+");
            //if (match.Success)
            //{
            //    Console.WriteLine(match.Value);
            //}
            //Console.ReadKey();

            #endregion

            #region 终止贪婪模式

            // string msg = "1111。11。111。111111。";

            ////在【限定符的后面】加一个?表示终止贪婪模式
            // //zoo?
            // //当终止贪婪模式的时候,默认按照最少的方式来匹配。
            // Match match = Regex.Match(msg, ".+?");
            // if (match.Success)
            // {
            //     Console.WriteLine(match.Value);
            // }
            // Console.ReadKey();

            #endregion

            #region 案例1

            //string msg = "1111。11。111。111111。";
            ////.+  →  1111。11。111。111111
            ////。  → 。
            //Match match = Regex.Match(msg, ".+。");
            //if (match.Success)
            //{
            //    Console.WriteLine(match.Value);
            //}
            //Console.ReadKey();


            #endregion


            #region 案例2

            //string msg = "1111。11。111。111111。";

            ////.+?  →  1111
            ////。   →。
            ////1111。
            //Match match = Regex.Match(msg, ".+?。");
            //if (match.Success)
            //{
            //    Console.WriteLine(match.Value);
            //}
            //Console.ReadKey();


            #endregion

            #region 提取人名


            //string msg = "大家好。我们是S.H.E。我是S。我是H。呜呜。大家好我是杨中科。fffff";

            //MatchCollection matches = Regex.Matches(msg, "我是.+?。");
            //for (int i = 0; i < matches.Count; i++)
            //{
            //    Console.WriteLine(matches[i].Value);
            //    Console.WriteLine("==================================================");
            //}
            //Console.ReadKey();


            #endregion

            #region 下载网页上的图片
            string url = "http://localhost:8080/美女们.htm";
            WebClient webClient = new WebClient();//WebRequest\WebResponse
            webClient.Encoding = Encoding.GetEncoding("utf-8");
            string html = webClient.DownloadString(url);

            //在html这个字符串中提取所有的图片的路径
            //<img alt="" src="hotgirls/00_00.jpg" />
            //<img src="" alt="" title=""/>
            MatchCollection matches = Regex.Matches(html, "<[iI][mM][gG] alt=\"\" src=\"(.+)\" />");
            for (int i = 0; i < matches.Count; i++)
            {
                if (matches[i].Success)
                {
                    //Console.WriteLine(matches[i].Value);
                    //Console.WriteLine(matches[i].Groups[1].Value);
                    string imgUrl = Path.Combine("http://localhost:8080/", matches[i].Groups[1].Value);
                    webClient.DownloadFile(imgUrl, @"c:\美女\" + Path.GetFileName(matches[i].Groups[1].Value));
                    //Console.WriteLine(imgUrl);
                }
            }
            Console.WriteLine("ok");
            Console.ReadKey();
            #endregion


        }
    }
}