《正则表达式及在应用精品文稿.ppt》由会员分享,可在线阅读,更多相关《正则表达式及在应用精品文稿.ppt(14页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、正则表达式及在应用第1页,本讲稿共14页目录基本概念基本概念典型实例演示及分析典型实例演示及分析第五节第五节 tcltcl中的应用一中的应用一 regexpregexp贪婪与非贪婪模式贪婪与非贪婪模式常用正则表达式集常用正则表达式集第六节第六节 tcltcl中的应用二中的应用二 regsubregsub第2页,本讲稿共14页第一节 正则表达式的基本概念正则表达式:指一个用来描述或者匹配一系列符合某个句法规则的字符串的单个字符串(公式)。用处:用来检索和/或替换那些符合某个模式的文本内容。许多程序设计语言都支持利用正则表达式进行字符串操作。组成:有一些普通字符和一些元字符组成(包括汉字)。普通字
2、符包括大小写的字母和数字;元字符是具有特殊含义的字符。第3页,本讲稿共14页元字符元字符描述描述 将下一个字符标记为一个特殊字符、或一个原义字符、或一个向后引用、或一个八进制转义符.匹配除“n”之外的任何单个字符。要匹配包括“n”在内的任何字符,可使用”(.|n)”的模式.匹配输入字符串的开始位置。如:hello 匹配“hello world”,但不匹配“world hello”。$匹配输入字符串的结束位置。如:hello$匹配“world hello”,但不匹配“hello world”*匹配前面的子表达式零次或多次。如:zo*能匹配“z”“zo”zoo”。等价于0,。+匹配前面的子表达式一
3、次或多次。如:zo+能匹配“zo”zoo”。等价于1,。?匹配前面的子表达式零次或一次。如:zo*能匹配“z”“zo”。等价于0,1。nnn为非负整数。匹配确定的n次。o2匹配”zoo”中的“oo”,但不能匹配”zo”中的“o”。n,n,n为非负整数。至少匹配n次。o2匹配“zooo”中的“ooo”,但不能匹配”zo”中的“o”。n,mn,mm,n均为非负整数,且n=m。最少匹配n次且最多匹配m次。?当该字符紧跟在任何一个其他限制符(*,+,?,n,n,,n,m)后面时,匹配模式是非贪婪非贪婪的。非贪婪模式尽可能少的匹配所搜索的字符串,而默认的贪婪模式则尽可能多的匹配所搜索的字符串.例如,对于
4、字符串“oooo”,“o+?”将匹配单个“o”,而“o+”将匹配所有“o”。;c1-c2;c1-c2;xyz 匹配方括号中x,y,z的任意一个字符;a-z匹配任意一个小写字符。xyz不匹配方括号中x,y,z的任意一个字符;同理a-z;第二节 常用正则表达式集第4页,本讲稿共14页第二节 常用正则表达式集元字符元字符描述描述(sub_exp)(sub_exp)()之间的表达式被定义为“组”,并且将匹配这个表达式的字符保存到一个临时区域,可被单独引用。(在之后讲的regexp中的substring用到。)x|yx|y 匹配x或y。例如,“z|food”能匹配“z”或“food”。“(z|f)ood
5、”则匹配“zood”或“food”。bb 匹配一个单词边界,也就是指单词和空格间的位置。例如,“erb”可以匹配“never”中的“er”,但不能匹配“verb”中的“er”。BB 匹配非单词边界。“erB”能匹配“verb”中的“er”,但不能匹配“never”中的“er”。dd 匹配一个数字字符。等价于0-9。DD 匹配一个非数字字符。等价于0-9。ff匹配一个换页符。等价于x0c和cL。rr匹配一个回车符。等价于x0d和cM。ss匹配任何空白字符,包括空格、制表符、换页符等等。等价于fnrtv。SS匹配任何非空白字符。等价于fnrtv。ww匹配包括下划线的任何单词字符。等价于“A-Za-
6、z0-9_”。WW匹配任何非单词字符。等价于“A-Za-z0-9_”。unun匹配n,其中n是一个用四个十六进制数字表示的Unicode字符。第5页,本讲稿共14页第三节 贪婪与非贪婪模式贪婪与非贪婪模式影响的是被量词修饰的子表达式的匹配行为。贪婪模式在整个表达式匹配成功的前提下,尽可能多的匹配。非贪婪模式在整个表达式匹配成功的前提下,尽可能少的匹配。属于贪婪模式的量词,也叫做匹配优先量词,包括:“m,n”、“m,”、“?”、“*”和“+”。例子一:aatest1bbtest2cc 正则表达式一:.*匹配结果一:test1bbtest2 正则表达式二:.*?匹配结果二:test1 例子二:cs
7、dnfddabckjdsfjabc 正则表达式一:csdn.1,100abc 匹配结果一:csdnfddabckjdsfjabc 正则表达式二:csdn.1,100?abc 匹配结果二:csdnfddabc第6页,本讲稿共14页第四节 典型实例演示及分析 匹配整数:-?1-9d*$匹配浮点数:-?(1-9d*.d*|0.d*)匹配中文字符:u4e00-u9fa5 匹配双字节字符(包括汉字):x00-xff匹配国内电话号码:d3-d8|d4-d7匹配Email:(a-zA-Z0-9_-)+(a-zA-Z0-9_-)+(.a-zA-Z0-9_-)+分析:”“”“行首.“(a-zA-Z0-9_-)+
8、”“(a-zA-Z0-9_-)+”匹配a-z或A-Z或0-9或_或-任意字符一次或多次,也可以用w。非元字符,匹配字符本身“.”“.”匹配字符”.”,由于.为元字符,需要通过转义。第7页,本讲稿共14页第五节 tcl中的应用一 regexp -indices-indices 返回值变成了对应的匹配子串在整个字符串中所处位 置的索引。在正则表达式的概念中提到其用处为检索或替换,我们这节讲的regexp正是实现其检索功能。语法:regexpregexp?switches?exp string?matchVar?subMatchVar subMatchVar.?参数switches:-nocase-
9、nocase 匹配时不考虑大小写。第8页,本讲稿共14页-expanded-expanded 启用扩展的规则,将空格和注释忽略掉。第五节 tcl中的应用一 regexp-line-line 启用行敏感匹配。正常情况下和$只能匹配缓冲区起始和末尾,对于缓冲区内部新的行是不能匹配的,通过这个开关可以使缓冲区内部新的行也可以被匹配。它相当于同时使用-lnestop和-lineanchor 开关。-about-about 返回正则表达式本身的信息,而不是对缓冲区的解析。返回的是 一个list,第一个元素是子表达式的个数,第二个元素开始存放子表达式的信息。第9页,本讲稿共14页第五节 tcl中的应用一
10、regexp-all-all 进行最大可能的匹配。返回匹配的个数。匹配字串为最后一次匹配。-start indexstart index 强制从偏移为index开始的位置进行匹配。使用这个开关之后 ,将不能匹配行起始位置。如果使用了-indices开关,则indices表示绝对位置,index表示输入字符的相对位置。-lineanchor-lineanchor 改变和$的匹配行为,使可以匹配缓冲区内部的新行。-linestop-linestop 启动行结束敏感开关。使和.可以匹配缓冲区内部的新行。第10页,本讲稿共14页第五节 tcl中的应用一 regexp -表示这后面再没有开关(switc
11、hs)了,即使后面有以-开头的参数也被当作正规表达式的一部分。-inline-inline 直接以list的方式返回matchVal和submatchVal值.无需指定matchVal和submatchVal变量。-nocase-nocase 匹配时不考虑大小写 第11页,本讲稿共14页 参数matchVal:匹配字符串被赋予此变量。参数subMatchVar:匹配子正则表达式(“(sub_exp)”)的字串。第五节 tcl中的应用一 regexp第12页,本讲稿共14页第六节 tcl中的应用二 regsubregsubregsub?switchs?exp string subSpec varname 前三个参数switchs?exp string 和regexp一样。参数subSpec的值来替换字符串string中和正规表达式匹配的部分。参数varname被认为是一个变量,替换后的字符串存入改变量中。第13页,本讲稿共14页谢谢各位!第14页,本讲稿共14页
限制150内