正则表达式及在tcl应用.ppt
,作者:XXX部门:测试部日期:2011-11-16,制作:某某部时间:2011-1-1,正则表达式及在TCL中应用,目录,第一节 正则表达式的基本概念,正则表达式:指一个用来描述或者匹配一系列符合某个句法规则的字符串的单个字符串(公式)。用处:用来检索和/或替换那些符合某个模式的文本内容。许多程序设计语言都支持利用正则表达式进行字符串操作。组成:有一些普通字符和一些元字符组成(包括汉字)。普通字符包括大小写的字母和数字;元字符是具有特殊含义的字符。,第二节 常用正则表达式集,第二节 常用正则表达式集,第三节 贪婪与非贪婪模式,贪婪与非贪婪模式影响的是被量词修饰的子表达式的匹配行为。贪婪模式在整个表达式匹配成功的前提下,尽可能多的匹配。非贪婪模式在整个表达式匹配成功的前提下,尽可能少的匹配。属于贪婪模式的量词,也叫做匹配优先量词,包括:“m,n”、“m,”、“?”、“*”和“+”。例子一:aatest1bbtest2cc 正则表达式一:.*匹配结果一:test1bbtest2 正则表达式二:.*?匹配结果二:test1 例子二:csdnfddabckjdsfjabc 正则表达式一:csdn.1,100abc 匹配结果一:csdnfddabckjdsfjabc 正则表达式二:csdn.1,100?abc 匹配结果二:csdnfddabc,第四节 典型实例演示及分析,匹配整数:-?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_-)+”匹配a-z或A-Z或0-9或_或-任意字符一次或多次,也可以用w。非元字符,匹配字符本身“.”匹配字符”.”,由于.为元字符,需要通过转义。,第五节 tcl中的应用一 regexp,-indices 返回值变成了对应的匹配子串在整个字符串中所处位 置的索引。,在正则表达式的概念中提到其用处为检索或替换,我们这节讲的regexp正是实现其检索功能。,语法:regexp?switches?exp string?matchVar?subMatchVar subMatchVar.?参数switches:-nocase 匹配时不考虑大小写。,-expanded 启用扩展的规则,将空格和注释忽略掉。,第五节 tcl中的应用一 regexp,-line 启用行敏感匹配。正常情况下和$只能匹配缓冲区起始和末尾,对于缓冲区内部新的行是不能匹配的,通过这个开关可以使缓冲区内部新的行也可以被匹配。它相当于同时使用-lnestop和-lineanchor 开关。,-about 返回正则表达式本身的信息,而不是对缓冲区的解析。返回的是 一个list,第一个元素是子表达式的个数,第二个元素开始存放子表达式的信息。,第五节 tcl中的应用一 regexp,-all 进行最大可能的匹配。返回匹配的个数。匹配字串为最后一次匹配。,-start index 强制从偏移为index开始的位置进行匹配。使用这个开关之后,将不能匹配行起始位置。如果使用了-indices开关,则indices表示绝对位置,index表示输入字符的相对位置。,-lineanchor 改变和$的匹配行为,使可以匹配缓冲区内部的新行。,-linestop 启动行结束敏感开关。使和.可以匹配缓冲区内部的新行。,第五节 tcl中的应用一 regexp,-表示这后面再没有开关(switchs)了,即使后面有以-开头的参数也被当作正规表达式的一部分。,-inline 直接以list的方式返回matchVal和submatchVal值.无需指定matchVal和submatchVal变量。,-nocase 匹配时不考虑大小写,参数matchVal:匹配字符串被赋予此变量。参数subMatchVar:匹配子正则表达式(“(sub_exp)”)的字串。,第五节 tcl中的应用一 regexp,第六节 tcl中的应用二 regsub,regsub?switchs?exp string subSpec varname 前三个参数switchs?exp string 和regexp一样。参数subSpec的值来替换字符串string中和正规表达式匹配的部分。参数varname被认为是一个变量,替换后的字符串存入改变量中。,谢谢各位!,