正则表达式及用例分析_第1页
正则表达式及用例分析_第2页
正则表达式及用例分析_第3页
正则表达式及用例分析_第4页
正则表达式及用例分析_第5页
已阅读5页,还剩23页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

正则表达式及用例分析2第一部分:正则表达式基础3什么是正则表达式正则表达式(Regularexpression,简称Regex)。是一种工具,和他其他工具一样,他是人们为了解决某一类专门的问题而发明的。要想理解正则表达式及其功能,最好的办法是了解他可以解决什么样的问题。简单的说,正则表达式是一些用来匹配和处理文本的字符串。正则表达式作为一门单独的语言,并不是一种完备的程序设计语言,它甚至不能单独运行。它更像是内置于其他语言或软件产品的“迷你语言”。现在几乎所有的语言或工具都支持正则表达式。支持正则表达式的语言:C#、JavaScript、PHP、JSP、ASP、PERL、JAVA、VB、.NET、COLDFUSION、PYTHON等等。4先看一个列子在一篇英文小说中查找单词”Hi”? \bHi\b‘\b’是正则表达式中规定的一个特殊字符(听说:它叫做元字符),它标记单词的开头和结尾,也就是分界。注意:虽然通常英文的单词是由空格或标点符号或换行来分隔的,但是\b并不匹配这些单词分隔符中的任何一个,它只匹配一个位置。5先看一个列子如果你要找的是hi后面不远处跟着一个Lucy

呢?

\bhi\b.*\bLucy\b

.:元字符。匹配除了换行符意外的任意字符。

*:元字符。代表的是数量(而不是字符,更不是位置)。它指定 *前面的表达式可以连续重复出现任意次以使整个表达式得到匹配。先是一个单词hi,然后是任意个任意字符(但不能是换行),最后是Lucy这个单词

6再看一个例子怎样验证一个电话号码是否合法? 电话号码如0531-87654321

要匹配数字需要引入一个新元字符:\d匹配任意数字

\d:匹配一个任意数字

\d*:匹配任意多个任意的数字我们怎样用正则表达式匹配上面的电话号码呢?0\d\d-\d\d\d\d\d\d\d\d->化:0\d{2}-\d{8}0\d\d\d-\d\d\d\d\d\d\d\d->化:0\d{3}-\d{8}继续优化:0\d{2,3}-\d{8}7测试正则表达式由于正则表达式难于读写,所以有必要使用工具来测试正则表达式的正确性。在不同的环境下正则表达式的一些细节有差异,我们讨论的是C#下正则表达式的行为,所以,推荐使用.Net下的工具RegexTester.首先你确保已经安装了.NetFramework2.0,然后下载RegexTester.这是个绿色软件,下载完后打开压缩包,直接运行RegexTester.exe就可以了。

8元字符

代码说明.匹配除换行符以外的任意字符\w匹配字母或数字或下划线或汉字\s匹配任意的空白符\d匹配数字\b匹配单词的开始或结束^匹配字符串的开始$匹配字符串的结束理解以下正则表达式\ba\w*\b^\d{5,12}$\b\w{6}\b9字符转义问题:如果要在文本中查找元字符本身,应该怎样匹配?如:

www\.sina\.comD:\project d:\\project注意:

\元字符:取消元字符的特殊含义10重复理解以下正则表达式Windows\d+Windows后面跟1个或更多数字

13\d{9}

13后面跟9个数字(中国的手机号)

^\w+

一行的第一个单词(或整个字符串的第一个单词,具体匹配哪个意思得看选项设置)表2.常用的限定符代码/语法说明*重复零次或更多次+重复一次或更多次?重复零次或一次{n}重复n次{n,}重复n次或更多次{n,m}重复n到m次11字符类如果你想匹配没有预定义元字符的字符集合(比如元音字母a,e,i,o,u),应该怎么办?

很简单,把他们方括号里就OK了!

[aeiou]我们可以指定一个匹配范围:[0-9]匹配所有的数字[a-zA-Z]匹配所有的字母[0-1a-zA-Z]匹配所有的数字和字母试分析下面的正则表达式匹配什么?

\(0\d{2}[\)-]?\d{8}

12反义有时需要查找不属于某个能简单定义的字符类的字符。比如想查找除了数字以外,其它任意字符都行的情况,这时需要用到反义

试写出与之匹配的正则 表达式匹配不包含空白字符的字 符串

\S+

用尖括号括起来的以a开头

的字符串

<a[^>]+>

表3.常用的反义代码代码/语法说明\W匹配任意不是字母,数字,下划线,汉字的字符\S匹配任意不是空白符的字符\D匹配任意非数字的字符\B匹配不是单词开头或结束的位置[^x]匹配除了x以外的任意字符[^aeiou]匹配除了aeiou这几个字母以外的任意字符13替换替换指的是有几种规则,如果满足其中任意一种规则都应该当成匹配,具体方法是用|把不同的规则分隔开。匹配电话号码如0531-87654321 0\d{2}-\d{8}|0\d{3}-\d{8}规则可以是多个,如:

Windows98|Windows2000|WindosXP14分组提问?我们怎样重复单个字符?提问?如果我们想重复多个字符该怎么办?

使用()指定子表达式,然后指定子表达式的重复次数。举例:写出与IP地址匹配的正则表达式 如:

(\d{0,3}.){3}\d{0,3}很不幸,他也能匹配999.999.999.999那又该怎么办呢? ((2[0-4]\d?|25[0-5]?|[01]\d{0,2}).){3}(2[0-4]\d|25[0-5]|[01]\d{0,2})15.NET框架下正则表达式的使用16涉及到正则表达式的类命名空间:System.Text.RegularExpressions;17Regex

构造正则表达式需要涉及Regex类.在Regex类中包括:IsMatch()Replace()Split()Match18IsMatch()IsMatch()返回Bool值,如果测试字符满足正则表达式返回True否则返回False;例1:判断济南地区电话号码合法;

分析:济南地区电话号码组成0531********,前面为固定区号0531,后面满足8位数字;

设计正则表达式:0531\d{8}(解释:0531区号固定,后面为8个数字\d组成);

19演示示例:

staticvoidMain(string[]args){stringregexTest="0531-\\d{8}";//构造正则表达式

stringtestPhoneA=;stringtestPhoneB=;stringtestPhoneC=;//输入测试号码

Console.WriteLine("是否为济南电话:"+Regex.IsMatch(testPhoneA,regexTest).ToString());Console.WriteLine("是否为济南电话:"+Regex.IsMatch(testPhoneB,regexTest).ToString());Console.WriteLine("是否为济南电话:"+Regex.IsMatch(testPhoneC,regexTest).ToString());Console.ReadKey();}20Replace()Replace()方法实际上是一种替换的方法,替换匹配正则表达式例2:在发布带有公开电子邮件地址的文章时,替换@位AT避免产生垃圾邮件;

分析:首先需要判断文章中电子邮箱地址,然后执行替换

设计正则表达式:判断电子邮箱表达式”\w{1,}@w{1,}\.”;

21演示示例:staticvoidMain(string[]args){stringregexTest="\\w{1,}@\\w{1,}\\.";//正则表达式:\w{1,}@\w{1,}\.stringemail="myE-mailisxyxtl@163.com";//带邮箱地址的字符串

if(Regex.IsMatch(email,regexTest)){Console.WriteLine(Regex.Replace(email,"@","AT"));//将@替换为"AT"}else{Console.WriteLine("没有电子邮箱地址");}Console.ReadKey();}22Split()方法Split()方法实际上是拆分的方法,根据匹配正则表达式进行拆分储存在字符串数组中;

例3:从群发邮件地址中读取所有邮件地址;

分析:群发邮件采用“;”作为分割符,需要通过“;”进行拆分

23演示示例:staticvoidMain(string[]args){stringregexTest=";";//设定拆分符号

stringgroupMail="xyxtl@163.com;xyxtl@;xyxtl@263.com";//邮件群发地址

string[]personMail;//存储单个邮箱地址

personMail=Regex.Split(groupMail,regexTest);//差分邮件地址

foreach(stringstrinpersonMail){Console.WriteLine(str.ToString());//循环所有数组数据

}Console.ReadKey();}24构造Regex对象Regex类的构造函数Regex(Stringpattern,RegexOptionsoptions)

用修改模式的选项为指定的正则表达式初始化并编译Regex类的一个新实例。由.NETCompactFramework支持。pattern要匹配的正则表达式模式。optionsRegexOptions枚举值的按位“或”组合25构造Regex对象建立一个合法ISBN验证格式;

分析:ISBN格式为X-XXXXX-XXX-X;

正则表达式格式:\d-\d{5}-\d{3}-\d

构造该正则表达式函数RegexISBNRegex=newRegex(表达式,参数为空)

26演示示例:

staticvoidMain(string[]args){stringregexTest="\\d-\\d{5}-\\d{3}-\\d";//正则表达式

RegexisbnRegex=newRegex(regexTest,RegexOptions.None);Console.WriteLine("输入ISBN号");stringtemp=Console.ReadLine();if(isbnRegex.IsMatc

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论