您好,欢迎访问三七文档
正则表达式1正则表达式及其相关类2Web信息浏览与搜索正则表达式描述了一种字符串匹配的模式,可以用来检查一个串是否含有某种子串、将匹配的子串做替换或者从某个串中取出符合某个条件的子串等如果我们问那些UNIX系统的爱好者他们最喜欢什么,答案除了稳定的系统和可以远程启动之外,十有八九的人会提到正则表达式;如果我们再问他们最头痛的是什么,可能除了复杂的进程控制和安装过程之外,还会是正则表达式。那么正则表达式到底是什么?如何才能真正的掌握正则表达式并正确的加以灵活运用?下面将就此展开介绍,希望能够对那些渴望了解和掌握正则表达式的同学有所帮助。文本操作几乎无处不在,合理的处理文本可提高程序性能没有正则表达式,最基本的电子邮件输入检查都麻烦,可能一个小小的有效性验证都需要写很多的代码起源最早从Unix中的qed编辑器,并作为文本编辑和搜索工具中一个重要部分直到现在,属于Unix下专利,尤其是Perl中应用,NET中Regex从Perl中衍生而来简单定义?简写为Regexes,描述了一种字符串匹配的模式,检查一个串是否含有某种子串、将匹配的子串做替换或者从某个串中取出符合某个条件的子串等。也即是一串特殊的字符,转换为某种算法,根据这个算法来匹配文本(类似通配符、SQL中的%、词法语法分析)。字符串、文本处理相关VS、Delphi、Java、JavaScriptetc等工具、语言中对string的操作也都是最主要的方面,文本的操作也几乎无处不在,在考虑效率、性能时,正则的选择是很有必要的复杂度、可读性?Regexes有自己的简单语言,用于精确描述要匹配对象,一行表达式代替众多的编码,但创建复杂,含义含糊,可读性差,与Perl等成功的语言相同,但习惯后正则表达式将非常容易使用。1正则表达式及其相关类正则表达式提供了灵活高效的处理文本字符串的方法。正则表达式的全面模式匹配表示法使程序员可以快速分析大量文本以找到特定的字符模式;提取、编辑、替换或删除文本子字符串;也可以将提取的字符串添加到集合中。对于处理字符串的许多应用程序而言,正则表达式是不可缺少的工具。正则表达式的一个最为普遍的应用就是用于验证用户在线输入的邮件地址的格式是否正确。如果通过正则表达式验证用户邮件地址的格式正确,用户所填写的表单信息将会被正常处理;反之,如果用户输入的邮件地址与正则表达的模式不匹配,将会弹出提示信息,要求用户重新输入正确的邮件地址。由此可见正则表达式在WEB应用的逻辑判断中具有举足轻重的作用1.1正则表达式简介正则表达式:用某种模式去匹配指定字符串的一种表示方式。正则表达式由普通字符和元字符组成。普通字符:如字母、数字、汉字等。元字符:可以匹配某些字符形式的具有特殊含义的字符,其作用类似于DOS命令使用的通配符。1.1正则表达式简介(续)1.正则表达式基本书写符号符号含义示例解释匹配输入\转义符\*符号“*”*[]可接收的字符列表[efgh]e、f、g、h中的任意1个字符e、f、g、h[^]不接收的字符列表[^abc]除a、b、c之外的任意1个字符,包括汉字、数字和特殊符号m、q、5、*|匹配“|”之前或之后的表达式ab|cdab或者cdab、cd()将子表达式分组(abc)将字符串abc作为一组abc-连字符A-Z任意单个大写英文字母大写字母1.1正则表达式简介(续)2.正则表达式限定符限定符将可选数量的数据添加到正则表达式,下表为常用限定符:符号含义示例解释匹配输入不匹配输入*指定字符重复0次或n次(abc)*仅包含任意个abc的字符串abc、abcabcabca、abca+指定字符重复1次或n次m+(abc)*以至少1个m开头,后接任意个abc的字符串m、mabc、mabcabcma、abc?指定字符重复0次或1次m+abc?以至少1个m开头,后接ab或abc的字符串mab、mabc、mmmab、mmabcab、abc、mabcc{n}只能输入n个字符[abcd]{3}由abcd中字母组成的任意长度为3的字符串abc、dbc、adca、aa、dcbd1.1正则表达式简介(续)符号含义示例解释匹配输入不匹配输入{n,}指定至少n个匹配[abcd]{3,}由abcd中字母组成的任意长度不小于3的字符串aab、dbc、aaabdca、cd、bb{n,m}指定至少n个但不多于m个匹配[abcd]{3,5}由abcd中字母组成的任意长度不小于3,不大于5的字符串abc、abcd、aaaaa、bcdabab、ababab、a^指定起始字符^[0-9]+[a-z]*以至少1个数字开头,后接任意个小写字母的字符串123、6aa、555edfabc、aaa、a33$指定结束字符^[0-9]\-[a-z]+$以1个数字开头后接连字符“–”,并以至少1个小写字母结尾的字符串2-a、3-ddd、5-efg33a、8-、7-Ab1.1正则表达式简介(续)3.匹配字符集(1)匹配字符集是预定义的用于正则表达式中的符号集。(2)如果字符串与字符集中的任何一个字符相匹配,它就会找到这个匹配项。1.1正则表达式简介(续)符号含义示例解释匹配输入不匹配输入.匹配除\n以外的任何字符a..b以a开头,b结尾,中间包括2个任意字符的长度为4的字符串aaab、aefb、a35b、a#*bab、aaaa、a347b\d匹配单个数字字符,相当于[0-9]\d{3}(\d)?包含3个或4个数字的字符串123、987612、01023\D匹配单个非数字字符,相当于[^0-9]\D(\d)*以单个非数字字符开头,后接任意个数字字符串a、A342aa、AA78、1234\w匹配单个数字、大小写字母和汉字字符\d{3}\w{4}以3个数字字符开头的长度为7的字符串234abcd、12345Pe58a、Ra46\W匹配单个除汉字、字母、数字以外的其他字符\W+\d{2}以至少1个非数字、字母和汉字的字符开头,2个数字字符结尾的字符串#29、#?@1023、#?@100正则表达式中的部分匹配字符集1.1正则表达式简介(续)4.分组构造分组构造说明()非命名捕获。捕获匹配的子字符串(或非捕获组)。编号为零的第一个捕获是由整个正则表达式模式匹配的文本,其它捕获结果则根据左括号的顺序从1开始自动编号。(?name)命名捕获。将匹配的子字符串捕获到一个组名称或编号名称中。也可以用单引号替代尖括号,例如(?'name')常用分组构造形式1.1正则表达式简介(续)5.正则表达式举例(1)至少1个字符:.{1,}(2)3个“.”句点符号:\.{3}(3)括号括起来的2~3个数字构成的字符串:\([0-9]{2,3}\)其中的反斜杠“\”表示转义。(4)必须包含“ab”的字符串:.{0,}ab.{0,}(5)以字母开头,允许包含字母、数字及下划线,长度为5~16:[a-zA-Z][a-zA-Z0-9_]{5,16}(6)国内电话号码:(\d{3}-|\d{4}-)?(\d{8}|\d{7})(7)至少3个汉字:[\u4e00-\u9fa5]{3,}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类表示正则表达式下一个匹配的结果,得到的结果是只读的。例如:Regexr=newRegex(abc);Matchm=r.Match(123abc456);if(m.Success){Console.WriteLine(找到匹配位置:+m.Index);Console.WriteLine(找到匹配结果:+m.Value);}运行结果:找到匹配位置:3找到匹配结果:abc1.2正则表达式相关类3.MatchCollection类MatchCollection类表示成功的非重叠匹配的集合,得到的集合是只读的。例如:Regexr=newRegex(abc);MatchCollectionmc=r.Matches(123abc4abcd);intcount=mc.Count;String[]results=newString[count];int[]matchPosition=newint[count];for(inti=0;icount;i++){results[i]=mc[i].Value;matchPosition[i]=mc[i].Index;Console.WriteLine(第{0}个匹配结果:{1},位置:{2},i+1,results[i],matchPosition[i]);}运行结果:第1个匹配结果:abc,位置:3第2个匹配结果:abc,位置:71.2正则表达式相关类4.Group类Group类表示单个捕获组的结果。当与正则表达式匹配的字符串有多组时,可以使用该类得到某一组的结果。1.2正则表达式相关类【例1】编写一个Windows应用程序,输入某个正则表达式和一个字符串,然后验证该字符串中是否包含与正则表达式匹配的内容。1.2正则表达式相关类【例2】编写一个Windows应用程序,利用正则表达式验证用户注册信息是否符合要求。TextBoxNametextBoxAgetextBoxPasswordlabelNamelabelAgelabelPasswordbuttonOK2Web信息浏览与搜索2.1WebBrower控件通过此控件可以在Windows窗体客户端应用程序中显示网页,复制应用程序中的InternetExplorerWeb浏览功能,禁用默认的InternetExplorer功能,并将该控件用作简单的HTML文档查看器等。2.1WebBrower控件【例3】使用WebBrowser控件创建一个简易浏览器。textBox1webBrower1Dock:FillbuttonGobuttonGoBackbuttonGoForwardbuttonRefresh2.2利用正则表达式搜索Web资源WebClient类在System.Net命名空间下的WebClient类提供向URI标识的任何本地、Intranet或Internet资源发送数据以及从这些资源接收数据的公共方法。通过此类从Web站点下载文件两种方式:1.直接保存为本地文件2.通过流进行读取,具体采用哪种方式要视情况而定。2.2利用正则表达式搜索Web资源DownloadFile方法该方法有两个参数:URI和本地保存路径。如:WebClientmyWebClient=newWebClient();myWebClient.DownloadFile(:\\test.htm);OpenRead方法此方法返回一个Stream引用,然后可以从数据流中读取数据,如:usingSystem.Net;usingSystem.IO;……2.2利用正则表达式搜索Web资源WebClientwebClient=newWebClient();StreammyStream=we
本文标题:正则表达式
链接地址:https://www.777doc.com/doc-7236916 .html