013天(.net学习之路
来源:互联网 发布:将照片从mac导入iphone 编辑:程序博客网 时间:2024/04/29 15:55
正则表达式
详细请看这位大神的《正则表达式30分钟入门教程》
(学习正则表达式之前必须有个好的工具,我使用的是Regulator.exe)
一、学习正则的时候不必都记住某个元字符具体的意思,但是必须知道都有那些功能,方便以后使用到的时候能及时解决问题。
二、学习后必须知道的知识点 (先学会使用这些基本就够用了,其他的在开发中再去看就是了)
1、元字符(常用的)
序号 元字符 作用 实例 1 .点 匹配任意单个字符 2 []中括号 匹配其中单个字符 例[123]或[1-3] 表示匹配1或2或3 3 ()小括号 改变优先集,()中的也表示一个组 4 |竖线 或 g|food 匹配g 或 food ;(g|f)ood 表示匹配good 或 food 5 *星号 0次或多次 6 + 1次或多次 7 ? 0次或1次 8 {} {n}表示确定n次;{n,}表示最少出现n次;{n,x}表示最少出现n次且最多出现x次 9 ^ ^表示以什么开始 ^123asd 表示以123asd开头;^(123)asd 表示以123开头 10 $ $表示以什么结束
2、简写表达式(常用的)
序号 表达式 作用 实例 1 \d 匹配一个数字 等同于[0-9] \D 匹配非数字 等同于[^0-9] 2 \s 匹配换行符、Tab制表符、空格等空白字符 \S 匹配非空白字符 3 \w 匹配“字母”、“数字”、“下划线”、“汉字” \W 非\w 4 [\u4e00-\u9fff] 匹配所有汉字
3、匹配组
()小括号中的可以看做是一个组,在提取的时候整个匹配项是X[0],第一个小括号是X[1],依次类推
4、贪婪模式和非贪婪模式
+、*的匹配默认是贪婪的:尽可能多的匹配,直到“再贪婪一点儿”其后的匹配模式就没法匹配为止。
在+、*后添加?就变成非贪婪模式(? 的另外一个用途):让其后的匹配模式尽早的匹配。
实例:字符串:“孔子说:三人行,必有我妻。择其靓者而娶之。”
贪婪模式:"孔子.+。" 匹配结果:“孔子说:三人行,必有我妻。择其靓者而娶之。”
非贪婪模式:"孔子.+?。" 匹配结果:“孔子说:三人行,必有我妻。”
三、C#中如何操作正则表达式
Regex.IsMatch 字符串匹配
Regex.Match 字符串提取
Regex.Matches 提取多个匹配结果
Regex.Replace 正则替换 分组替换
Match
MatchCollection
单行模式 Single line 让正则表达式的.能匹配到\n
多行模式 Multiline ^$ 匹配每一行的内容
四、实例
1、判断日期格式是否合法(2013-5-27、2013-05-27、2013-05-5、2013-5-5都合法)
正则表达式:^\d{4}\-(0?[1-9]|1[012])\-(0?[1-9]|[12][0-9]|3[01])$
1 static void Main(string[] args)2 {3 string str=@"\d{4}\-(0?[1-9]|1[012])\-(0?[1-9]|[12][0-9]|3[01])";//正则表达式(不能匹配润年平年哈)4 Console.WriteLine(Regex.IsMatch("传说中这一天,也就是2012-2-31是世界末日。", str));//打印判断结果5 Console.WriteLine(Regex.Match("传说中这一天,也就是2012-2-31是世界末日。", str)); //把匹配的结果打印出来 6 Console.ReadKey();7 8 }
2、从网上抓取指定网页内的所有email地址
1 static void Main(string[] args) 2 { 3 //邮箱的正则表达式 4 //不知道邮箱能不能以汉字开头,所以没有排除汉字开头 5 //这里定义了邮箱只能以a-z结束 6 7 string reg = @"\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*[a-z]"; 8 //实例化一个WebClient wc来下载URL上的字符串 9 WebClient wc = new WebClient();10 string str = wc.DownloadString("http://bbs.tianya.cn/post-936-94688-1.shtml");11 //Match集合MatchCollection 来接收Regex.Matches(str, reg)分析出来的信息。12 MatchCollection mcs = Regex.Matches(str, reg);13 //遍历 mcs,打印他的每一个值14 foreach (Match item in mcs)15 {16 if (item.Success)17 {18 //如果值里面还有分组请使用item.Groups[n]来取值19 Console.WriteLine(item.Value);20 }21 }22 Console.Read();23 24 }
<script type="text/javascript"><!--google_ad_client = "ca-pub-1944176156128447";/* cnblogs 首页横幅 */google_ad_slot = "5419468456";google_ad_width = 728;google_ad_height = 90;//--></script><script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>
- 013天(.net学习之路
- .NET学习之路
- .net学习之路
- .NET学习之路。
- 012天(.net学习之路
- 011天(.net学习之路
- 014天(.net学习之路
- 017天(.net学习之路
- 学习ASP.NET之路
- .net 学习之路 一
- C#.NET学习之路
- .net 学习之路(转)
- 学习ASP.NET之路
- .net新手之学习之路一
- asp.net 学习之路之DataSet
- Visual Studio .NET学习之路
- Visual Studio .NET 学习之路
- ASP.NET程序员学习之路
- Effective C++(五)实现
- php分页类
- Gcc编译流程解析
- arm驱动程序——按键程序4_poll(韦东山的视频总结及针对linux-2.6.30)
- 自己动手写Web容器之TomJetty之一:服务内功经脉
- 013天(.net学习之路
- 公司是否应该支持员工写技术博客?
- 深入Java单例模式
- hibernate
- 我要去谷歌
- 挨踢江湖之三
- 博客人生从此开始
- C# Obsolete
- C# WPF 快速开发21拼接复合搜索的SQL语句