zoukankan      html  css  js  c++  java
  • 正则表达式的初体验:分析字符串数据

    在程序中,对于数据的分析是非常重要及常见的。对于字符串数据的分析,往往就是对字符串的内容提取,捕获和替换。除非你要做的分析是简单的要求,否则你就不要再使用string的IndexOf、LastIndexOf、StartsWith 和 EndsWith 方法了,而是应该改用正则表达式搜索字符串。
          正则表达式虽然学习起来非常的另人头痛和难过,但他也实在是非常的有效。
          .NET Framework 正则表达式引擎是回溯的正则表达式匹配器,它并入了传统的非确定性有限自动机 (NFA) 引擎,虽然相比纯正则表达式确定性有限自动机 (DFA) 引擎来讲,速度上面有点慢,但功能更加强大了。

    通过强大的正则表达式,可以作很多分析服务

    1            //要求整个数字可以有-号,精度必须为2
    2            string pattern = @"^-?\d+(\.\d{2})?$";
    3            System.Text.RegularExpressions.Regex rx = new System.Text.RegularExpressions.Regex(pattern);
    4            string[] patternTest ="-12.23""+12.23""22.3""22""=2.34""2.34.45""3242 ""343.343""" };
    5            for (int i = 0; i <= patternTest.Length - 1; i++)
    6            {
    7                System.Console.WriteLine("{0} is {1}", patternTest[i], rx.IsMatch(patternTest[i]));
    8            }
    运行结果为
    -12.23 is True
    +12.23 is False
    22.3 is False
    22 is True
    =2.34 is False
    2.34.45 is False
    3242  is False
    343.343 is False
     is False

    修正了正则表达式,又可以对数据有其他的分析
    1            string pattern = @"^[-|+]?\d+(\.\d{0,2})?$";
    2            System.Text.RegularExpressions.Regex rx = new System.Text.RegularExpressions.Regex(pattern);
    3            string[] patternTest ="-12.23""+12.23""22.3""22""=2.34""2.34.45""32. ","343.343""" };
    4            for (int i = 0; i <= patternTest.Length - 1; i++)
    5            {
    6                System.Console.WriteLine("{0} is {1}", patternTest[i], rx.IsMatch(patternTest[i]));
    7            }
     

    运行结果是
    -12.23 is True
    +12.23 is True
    22.3 is True
    22 is True
    =2.34 is False
    2.34.45 is False
    32.  is False
    343.343 is False
     is False

    依据这个例子,可以作一个很有效的分析用户输入的程序了


          以下是一个向远程请求http页面的,根据返回的结果,查找url连接的demo,可以根据这个demo了解象FlashGet之类的软件是如何快速有效的分析出可以下载的地址的。

     1            string url = "Http://news.sina.com.cn";
     2            System.Net.WebRequest request = System.Net.WebRequest.Create(url);
     3            System.Net.HttpWebResponse response = (System.Net.HttpWebResponse)request.GetResponse();
     4            System.IO.Stream httpStream = response.GetResponseStream();
     5            System.IO.StreamReader htmlRead = new System.IO.StreamReader(httpStream);
     6            string html = htmlRead.ReadToEnd();
     7
     8            //System.Console.WriteLine(html); 
     9
    10
    11            string pattern = @"http://([\w-]+\.)+[\w-]+(/[\w- ./?%&=]*)?";
    12            System.Text.RegularExpressions.Regex rx = new System.Text.RegularExpressions.Regex(pattern);
    13            System.Text.RegularExpressions.MatchCollection matches = rx.Matches(html);
    14
    15            for (int i = 0; i <= matches.Count - 1; i++)
    16            {
    17                System.Console.WriteLine(matches[i].Value);
    18            }
     


    运行结果是,显示所有连接,大致如下
    http://www.nen.com.cn/ target=_blank
    http://www.tianshannet.com.cn/ target=_blank
    http://www.nmgcb.com.cn/ target=_blank
    http://www.jxcn.cn/ target=_blank
    http://www.szed.com/ target=_blank
    http://www.hljdaily.com.cn/ target=_blank
    http://www.hifly.tv/ target=_blank
    http://www.chinalegalnews.com.cn/ target=_blank
    http://www.newssc.org
    http://www.sconline.com.cn/ target=_blank
    http://www.xawb.com/gb/news/node_2.htm target=_blank
    http://www.anhuinews.com/ target=_blank
    http://www.xinminweekly.com.cn/ target=_blank
    http://news.cnhubei.com/ target=_blank
    http://www.sdnews.com.cn/ target=_blank
    http://www.qingdaonews.com/ target=_blank
    http://www.dzwww.com/ target=_blank
    http://www.66wz.com/cmsweb/webportal/ target=_blank
    http://www.bjd.com.cn/ target=_blank
    http://www.beijing.org.cn
    http://news.sina.com.cn/media.html  target=_blank
    http://image2.sina.com.cn/c.gif width=1 height=1
    http://tech.sina.com.cn/focus/sinahelp.shtml target=_blank
    http://net.china.cn/chinese/index.htm target=_blank
    http://corp.sina.com.cn/chn/ class=sinatail
    http://corp.sina.com.cn/eng/ class=sinatail
    http://ads.sina.com.cn/ class=sinatail
    http://www.sina.com.cn/contactus.html class=sinatail
    http://corp.sina.com.cn/chn/sina_job.html class=sinatail
    http://www.sina.com.cn/intro/lawfirm.shtml class=sinatail
    http://english.sina.com
    http://members.sina.com.cn/apply/ class=sinatail
    http://tech.sina.com.cn/focus/sinahelp.shtml class=sinatail
    http://www.sina.com.cn/intro/copyright.shtml class=sinatail
    http://ad4.sina.com.cn/200702/13/82610_news-couple-l.swf
    http://ad4.sina.com.cn/200702/13/82609_news-couple-r.swf
    http://ad4.sina.com.cn/sina/ae/ad_src/couplet/coupletv4.js
    http://rm.sina.com.cn/icast/rotator.js
    http://cast.icast.com.cn/a/4/4/1/9/1/389.js
    http://image2.sina.com.cn/unipro/pub/getclickinfo_sinahome.js

  • 相关阅读:
    461. Hamming Distance
    342. Power of Four
    326. Power of Three
    368. Largest Divisible Subset java solutions
    95. Unique Binary Search Trees II java solutions
    303. Range Sum Query
    160. Intersection of Two Linked Lists java solutions
    88. Merge Sorted Array java solutions
    67. Add Binary java solutions
    14. Longest Common Prefix java solutions
  • 原文地址:https://www.cnblogs.com/shyleoking/p/651772.html
Copyright © 2011-2022 走看看