正则表达式的初体验:分析字符串数据

简介:
在程序中,对于数据的分析是非常重要及常见的。对于字符串数据的分析,往往就是对字符串的内容提取,捕获和替换。除非你要做的分析是简单的要求,否则你就不要再使用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
 



本文转自shyleoking 51CTO博客,原文链接:http://blog.51cto.com/shyleoking/806259

相关文章
|
2月前
|
JavaScript 前端开发
JavaScript随手笔记 --- 用正则表达式匹配字符串是否为运算公式
JavaScript随手笔记 --- 用正则表达式匹配字符串是否为运算公式
|
1月前
|
JavaScript 前端开发
用JavaScript正则表达式匹配对应字符串高亮显示,并过滤掉空格、<、>等HTML节点符号
用JavaScript正则表达式匹配对应字符串高亮显示,并过滤掉空格、<、>等HTML节点符号
|
6月前
|
Python
133 python高级 - 正则表达式(原始字符串)
133 python高级 - 正则表达式(原始字符串)
29 0
|
7月前
|
C++
使用 ABAP 正则表达式提高字符串解析的执行效率
使用 ABAP 正则表达式提高字符串解析的执行效率
64 0
|
8月前
|
程序员
用正则表达式判断字符串形式正误(例:判断电话号码属地是否为中国大陆)
用正则表达式判断字符串形式正误(例:判断电话号码属地是否为中国大陆)
46 0
|
2月前
|
Linux Perl
使用awk和正则表达式过滤文本或字符串 - 详细指南和示例
使用awk和正则表达式过滤文本或字符串 - 详细指南和示例
83 0
|
4月前
|
C++
leetcode-8:字符串转换整数(有限自动机(DFA)和正则表达式)
leetcode-8:字符串转换整数(有限自动机(DFA)和正则表达式)
38 1
|
9月前
|
Java
避免分割字符串的常见错误:正则表达式元字符未转义
在编程和文本处理中,我们经常需要将一个字符串按照特定的分隔符拆分成多个部分。为了实现这一目标,我们使用分割函数或正则表达式来定义我们所需的分隔符。 在 Java 的 String 类的 split() 函数中,如果你使用字符串参数作为分隔符,例如 split(","),它会按照每个字符作为分隔符进行字符串拆分。
61 0
|
10月前
|
JavaScript 前端开发 索引
javascript截取两个符号之间的字符串(2):lastIndexOf匹配和正则表达式匹配
javascript截取两个符号之间的字符串(2):lastIndexOf匹配和正则表达式匹配
286 0
|
5月前
|
算法
【面试算法——动态规划 21】正则表达式匹配(hard)&& 交错字符串
【面试算法——动态规划 21】正则表达式匹配(hard)&& 交错字符串