正则表达式总结.doc_第1页
正则表达式总结.doc_第2页
正则表达式总结.doc_第3页
正则表达式总结.doc_第4页
正则表达式总结.doc_第5页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

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

文档简介

什么是正则表达式?正则表达式(Regular Expression)也叫匹配模式(pattern),用来检验字符串是否满足特定规则,或从字符串中捕获满足特定规则的子串。2.字符匹配最简单的正则表达式由普通字符和通配符组成。比如“Rommddd”这样的正则表达式。其中,Room是普通字符,而/d是通配符,表示该位置上有一个数字。正则表达式难读难写,容易出错,可以使用“Regex Tester”工具进行测试。3.通配符通配符说明d匹配数字0-9w匹配单词字符,包括小写字母a-z,大写字母A-Z,数字0-9,和下划线。s匹配任何空白字符,包括空格,制表符,换页符等(即匹配n,f,t,v以及空格)D匹配任何非数字字符W匹配任何非单词字符S匹配任何非空白字符.匹配除换行符(n)之外的任何字符这些特殊字符在正则表达式中称为元字。要表达元字本身,就必须使用转义字符。例如:符号.在正则表达式中是元字,要想表达.本身(假如我想匹配)需要使用他的转义字符.,同样要表达本身,需要使用它的转义字符4.与正则表达式相关的类.net提供了一系列与正则表达式相关的类,它们都位于System.Text.RegularExpressions命名空间。其中最常用的是Regex类。Regex类的部分方法名称说明IsMatch()检验能否在字符串中找到和正则表达式匹配的子串Match()获取字符串中与正则表达式匹配的第一个子串NextMatch()获取下一个匹配的子串Matches()获取字符串中所有与正则表达式匹配的子串Replace()用指定的字符串替换原字符串中与正则表达式匹配的子串,相当于word中的替换功能。Split()找出与正则表达式匹配的子串,并以这些子串为“分割标记”拆分字符串。通过Regex.Matches()方法,可以从给定的字符串中分解出所有与正则表达式匹配的子串,这些子串可以保存在一个MatchCollection型集合中,每个子串都被看作Match类的对象。5.可选字符集除了通配符外,还可以把某个位置上允许出现的字符写在 内,组成可选字符集,例如: abc 表示该位置可以出现a,b,c中的任意一个字母 A-D 表示该位置可以出现字母A,B,C,D A-DM-P 表示该位置可以出现A到D或者M-P中的任意一个字母 A-Da-d 表示该位置可以出现A-D或者a-d中的任意一个字母 12 表示该位置可以出现数字1或者数字2 1-5 表示该位置可以出现1-5 0-47-9 表示该位置可以出现0-4或者7-9 sS 表示该位置可以出现任何字符,包括空格,制表符,换行等。反向字符集在 中括号中用符号表示非。例如: c 表示除c以外的所有字符 abc 表示除abc以外的任何字符 0-9 匹配除0-9以外的所有字符。 # 匹配除#以外的所有字符 n 匹配除换行符以外的所有字符在正则表达式中, 是有特殊含义的,如果我们想匹配“ ”本身,就要使用转义字符,同理, 括号中的-也是一样,需要这样写-6.或匹配在正则表达式中使用|表示“或”例如: x|y 表示x或y good|ok; 表示good或者ok (tr|b)ee 表示tree或者bee th(i|a)nk 表示think或者thank book one|two 表示book one或者book two book (one|two) 表示book one 或者book two7.数量限定符限定符说明*将前面的字符重复0次或多次+将前面的字符重复1次或多次?将前面的字符重复0次或1次n将前面的字符重复n遍n,将前面的字符至少重复n遍,即n遍或更多n,m将前面的字符重复n至m遍*?将前面的字符重复0次或多次,尽量少的重复+?将前面的字符重复1次或多次,尽量少的重复?将前面的字符重复0到1次,尽量少的重复n?将前面的字符重复n遍,尽量少的重复,等效于nn,?将前面的字符至少重复n遍,尽量少的重复。n,m?将前面的字符重复n至m遍,尽量少的重复。*在正则表达式中有特殊含义,要想表达*本身要使用转义字符*“?”用法还不是很理解,什么是尽可能少匹配? ”n,?“是否也等价于“n”8.定位符 单词通常以空格,段首,段尾,逗号,句号,问号等符号做边界,分隔符“-”也可以作为边界。定位符用于检索出这些边界。例如:bw+b。但要注意b只表示单词与边界符号之间的位置,起到定位的作用,不表示边界符号本身。例如:I am jim, 如使用上面的正则表达式检索,只会检索出“I”,am,“jim”三个单词,而不会包含空格。 定位符说明匹配字符串的开头位置,当出现边界时结束。例如:“w+ ” 注意与“w+”的区别$匹配字符串的结尾位置。例如w+$,也就是说他会从字符串的末尾还是检索。b匹配单词的边界位置B匹配不是单词边界的位置G匹配上一个匹配结束的位置(与方法Match.NextMatch()一起使用)A匹配字符串开头位置,类似于,但不受Multiline选项的影响。Z匹配字符串结尾的位置或换行符所在的位置(不受Multiline的影响)z类似$,但不受Multiline的影响9.分组和后向引用* (tr|b)ee这个正则表达式匹配tree或者bee,但是,“()”括号在正则表达式中,并不仅仅起着确定范围的作用。它同时会创建子表达式,每个子表达式形成一个分组,并把捕获到的与子表达式匹配的子串保存在分组中,以供将来使用。例如:“”是一个邮箱地址字符串,我们使用下面的表达式来匹配这个字符串:“(w+)(w+).(w+)”这里有三个括号,就会形成三个分组,默认情况下会形成三个组号从左向右,依次是1,2,3。* 如果出现嵌套分组,它们的编号也按左括号出现的顺序排列例如:My e-mail is (fangyan33)(gmail).(com))那么最外面的括号是第1组,后面的依次类推。* 。net提供了一个为分组命名的写法。?(w+)?(w+).?(w+)此时第一组的名字就是user 以后就可以使用user来访问第一组了。* 程序实例说明分组的用法:* 有一个字符串:“ fangyan33 aaa coco”找出每一个email地址与后面的用户名相同的子串。例如: fangyan33就是符合规则的子串。string str2 = fangyan cc coco ;foreach (Match match in Regex .Matches(str2, (w+)(w+).(w+) 1 ) /这里1表示与正则表达式中第一组相同Console .WriteLine(match);* 有一个电话簿: (010)23313442 (0931)2333345 (0755)86212233将其中的号码替换样的形式。string str3 = (010)23313442 (0931)2333345 (0755)86212233) ;string regexstr=(d3,4)(d7,8) ;string result=Regex .Replace(str3,regexstr, $1-$2);/这里$1表示第一组,$2表示第二组Console .WriteLine(result);* 为分组命名:(还是使用上面转换电话号码的程序)string str4 = (010)23313442 (0931)2333345 (0755)86212233 ;string regexstr2 = (?(d3,4)?(d7,8) ;string result2 = Regex .Replace(str4, regexstr2,$areaCode-$phoneNum ); /这里 $ 的形式使用组名Console .WriteLine(result);10.预查* 非捕获分组 ?:当我们需要使用()时,但又不想使其分组以增加不必要的内存开销,就可以使用?:例如:(?:tr|b)ee 此时,系统不会为其分组和指定组号。* 正向预查 (?=)和负正向预查(?!)举例说明,例如:我们想获取一系列邮箱地址中的用户名时。 “ 123163.com ”正则表达式: (/w+)(?=) 负正向预查表示后面跟的是非。* 反向预查(?=)和负反向预查(?!)举例说明,例如:我们想获取一系列邮箱地址中的二级域名时(163 ,gmail,qq等 )。 “ 123163.com ”正则表达式: (?=)(/w+) 负正向预查表示前面的是非。11.常用正则表达式选项选项名称说明IgnoreCase忽略大小写匹配时不区分大小写,默认区分Multiline多行模式更改$和的含义,使$匹配整个字符串的结尾位置(即n之前的位置)。使匹配整个字符串的开头位置,也匹配任意一行的开头位置(即n之后的位置)Singleline单行模式更改.的含义,使他匹配任何字符,包括换行符(n)(注意:它和Multiline之间没有任何联系,虽然名称看上去有)IgnorePatternWhitespace忽略空白忽略表达式中的非转义空白,并启用由#标记的注释ExplicitCapture显示捕获仅捕获已经被显式命名的组12.正则表达式中的注释* (?#注释内容)* #注释内容这个是多行注释,注释内容和正则表达式之间可以有空格,正则表达式会忽略这些空格;10.预查 非捕获分组 ?:当我们需要使用()时,但又不想使其分组以增加不必要的内存开销,就可以使用?:例如:(?:tr|b)ee 此时,系统不会为其分组和指定组号。 正向预查 (?=)和负正向预查(?!)举例说明,例如:我们想获取一系列邮箱地址中的用户名时。 “ 123163.com ”正则表达式: (/w+)(?=) 负正向预查表示后面跟的是非。 反向预查(?=)和负反向预查(?!)举例说明,例如:我们想获取一系列邮箱地址中的二级域名时(163 ,gmail,qq等 )。 “ 123163.com ”正则表达式: (?=)(/w+) 负正向预查表示前面的是非。11.常用正则表达式选项选项名称说明IgnoreCase忽略大小写匹配时不区分大小写,默认区分Multiline多行模式更改$和的含义,使$匹配整个字符串的结尾位置(即n之前的位置)。使匹配整个字符串的开头位置,也匹配

温馨提示

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

评论

0/150

提交评论