正则表达式ppt课件.ppt
正则表达式,1 正则表达式及其相关类2 Web信息浏览与搜索,正则表达式描述了一种字符串匹配的模式,可以用来检查一个串是否含有某种子串、将匹配的子串做替换或者从某个串中取出符合某个条件的子串等 如果我们问那些UNIX系统的爱好者他们最喜欢什么,答案除了稳定的系统和可以远程启动之外,十有八九的人会提到正则表达式;如果我们再问他们最头痛的是什么,可能除了复杂的进程控制和安装过程之外,还会是正则表达式。那么正则表达式到底是什么?如何才能真正的掌握正则表达式并正确的加以灵活运用?下面将就此展开介绍,希望能够对那些渴望了解和掌握正则表达式的同学有所帮助。文本操作几乎无处不在,合理的处理文本可提高程序性能没有正则表达式,最基本的电子邮件输入检查都麻烦,可能一个小小的有效性验证都需要写很多的代码,起源最早从 Unix 中的qed 编辑器,并作为文本编辑和搜索工具中一个重要部分直到现在,属于Unix下专利,尤其是Perl中应用,NET中Regex从Perl中衍生而来简单定义?简写为 Regexes,描述了一种字符串匹配的模式,检查一个串是否含有某种子串、将匹配的子串做替换或者从某个串中取出符合某个条件的子串等。也即是一串特殊的字符,转换为某种算法,根据这个算法来匹配文本(类似通配符、SQL中的%、词法语法分析)。字符串、文本处理相关VS、Delphi、Java、JavaScript etc 等工具、语言中对string的操作也都是最主要的方面,文本的操作也几乎无处不在,在考虑效率、性能时,正则的选择是很有必要的 复杂度、可读性?Regexes有自己的简单语言,用于精确描述要匹配对象,一行表达式代替众多的编码,但创建复杂,含义含糊,可读性差,与Perl等成功的语言相同,但习惯后正则表达式将非常容易使用。,1 正则表达式及其相关类,正则表达式提供了灵活高效的处理文本字符串的方法。正则表达式的全面模式匹配表示法使程序员可以快速分析大量文本以找到特定的字符模式;提取、编辑、替换或删除文本子字符串;也可以将提取的字符串添加到集合中。对于处理字符串的许多应用程序而言,正则表达式是不可缺少的工具。,正则表达式的一个最为普遍的应用就是用于验证用户在线输入的邮件地址的格式是否正确。如果通过正则表达式验证用户邮件地址的格式正确,用户所填写的表单信息将会被正常处理;反之,如果用户输入的邮件地址与正则表达的模式不匹配,将会弹出提示信息,要求用户重新输入正确的邮件地址。由此可见正则表达式在WEB应用的逻辑判断中具有举足轻重的作用,1.1 正则表达式简介,正则表达式:用某种模式去匹配指定字符串的一种表示方式。正则表达式由普通字符和元字符组成。普通字符:如字母、数字、汉字等。元字符:可以匹配某些字符形式的具有特殊含义的字符,其作用类似于DOS命令使用的通配符。,1.1 正则表达式简介(续),1.正则表达式基本书写符号,1.1 正则表达式简介(续),2.正则表达式限定符 限定符将可选数量的数据添加到正则表达式,下表为常用限定符:,1.1 正则表达式简介(续),1.1 正则表达式简介(续),3.匹配字符集(1)匹配字符集是预定义的用于正则表达式中的符号集。(2)如果字符串与字符集中的任何一个字符相匹配,它就会找到这个匹配项。,1.1 正则表达式简介(续),正则表达式中的部分匹配字符集,1.1 正则表达式简介(续),4.分组构造,常用分组构造形式,1.1 正则表达式简介(续),5.正则表达式举例(1)至少1个字符:.1,(2)3个“.”句点符号:.3(3)括号括起来的23个数字构成的字符串:(0-92,3)其中的反斜杠“”表示转义。(4)必须包含“ab”的字符串:.0,ab.0,(5)以字母开头,允许包含字母、数字及下划线,长度为516:a-zA-Za-zA-Z0-9_ 5,16(6)国内电话号码:(d3-|d4-)?(d8|d7)(7)至少3个汉字:u4e00-u9fa53,1、数据验证 测试输入的字符串,是否符合一定的规则,是否允许输入Email地址合法性、网址、电话号码、出生年月等等验证2、替换文本 可以使用正则表达式来识别文档中的特定文本,完全删除该文本或者用其他文本或字符替换。3、提取子字符串 基于模式匹配,可以查找文档内或输入域内特定的文本,也是正则中最常用的一部分,在涉及替换操作时往往都需要先提取。例如:我们常常会听到,我想提取到其中的XX内容、关键信息,想得到XX的一个参数属性值,又或是想判断用户提交的表单中是否存有相关信息(首页显示图片新闻、文字新闻的判断实现方式?)常见的提取形式:URL分析YearMonth、文章采集、搜索引擎的高亮显示等等。,1.2 正则表达式相关类,1.Regex类Regex 类表示不可变(只读)正则表达式类。Regex 类在System.Text.RegularExpressions命名空间下。常用方法。IsMatch方法:正则表达式在输入字符串中是否找到匹配项。Match方法:搜索下一个匹配项。Matchs方法:搜索所有匹配项。,1.2 正则表达式相关类,2.Match类Match类表示正则表达式下一个匹配的结果,得到的结果是只读的。例如:Regex r=new Regex(abc);Match m=r.Match(123abc456);if(m.Success)Console.WriteLine(找到匹配位置:+m.Index);Console.WriteLine(找到匹配结果:+m.Value);运行结果:找到匹配位置:3 找到匹配结果:abc,1.2 正则表达式相关类,3.MatchCollection类MatchCollection类表示成功的非重叠匹配的集合,得到的集合是只读的。例如:Regex r=new Regex(abc);MatchCollection mc=r.Matches(123abc4abcd);int count=mc.Count;String results=new Stringcount;int matchPosition=new intcount;for(int i=0;i count;i+)resultsi=mci.Value;matchPositioni=mci.Index;Console.WriteLine(第0个匹配结果:1,位置:2,i+1,resultsi,matchPositioni);运行结果:第1个匹配结果:abc,位置:3 第2个匹配结果:abc,位置:7,1.2 正则表达式相关类,4.Group类Group类表示单个捕获组的结果。当与正则表达式匹配的字符串有多组时,可以使用该类得到某一组的结果。,1.2 正则表达式相关类,【例1】编写一个Windows应用程序,输入某个正则表达式和一个字符串,然后验证该字符串中是否包含与正则表达式匹配的内容。,1.2 正则表达式相关类,【例2】编写一个Windows应用程序,利用正则表达式验证用户注册信息是否符合要求。,2 Web信息浏览与搜索,2.1 WebBrower控件通过此控件可以在 Windows 窗体客户端应用程序中显示网页,复制应用程序中的 Internet Explorer Web 浏览功能,禁用默认的 Internet Explorer 功能,并将该控件用作简单的 HTML 文档查看器等。,2.1 WebBrower控件,【例3】使用WebBrowser控件创建一个简易浏览器。,2.2 利用正则表达式搜索Web资源,WebClient类 在System.Net命名空间下的WebClient类提供向URI标识的任何本地、Intranet或Internet资源发送数据以及从这些资源接收数据的公共方法。通过此类从Web站点下载文件两种方式:1.直接保存为本地文件 2.通过流进行读取,具体采用哪种方式要视情况而定。,2.2 利用正则表达式搜索Web资源,DownloadFile方法 该方法有两个参数:URI和本地保存路径。如:WebClient myWebClient=new WebClient();myWebClient.DownloadFile(http:/C:test.htm);OpenRead方法 此方法返回一个Stream引用,然后可以从数据流中读取数据,如:using System.Net;using System.IO;,2.2 利用正则表达式搜索Web资源,WebClient webClient=new WebClient();Stream myStream=webClient.OpenRead(http:/);StreamReader sr=new StreamReader(myStream);string httpSource=sr.ReadToEnd();DownloadString方法 直接读取包含网页源代码的字符串内容。例如:using System.Net;WebClient client=new WebClient();string reply=client.DownloadString(Http:/);Console.WriteLine(reply);,2.2 利用正则表达式搜索Web资源,【例4】设计一个简单的搜索程序,能读取指定网址的html源文件,并能用正则表达式搜索包含的超链接与图片。设计界面如图:,2.2 利用正则表达式搜索Web资源,例4 运行效果:,