正则表达式的匹配和应用幻灯片.ppt
正则表达式的匹配和应用第1页,共23页,编辑于2022年,星期六主要内容正则表达式简介正则表达式匹配实例正则表达式应用第2页,共23页,编辑于2022年,星期六什么是正则表达式定义l正则表达式,就是用某种模式去匹配一类字符串的公式。应用l可用于查找特定条件的字符串l可用于某些工具(vi,grep,find等)中进行模式匹配和替换第3页,共23页,编辑于2022年,星期六正则表达式基础普通字符l大小写的字母和数字元字符l具有特殊的含义的字符第4页,共23页,编辑于2022年,星期六元字符(1).匹配单个字符l如:r.t 匹配rat,rot等*匹配0个或多个在它之前的那个字符 l如:r*t 匹配 t,rt,rrt等+匹配1或多个正好在它之前的那个字符l如:r+t匹配rt、rrt等,但不匹配t 引用符,用来将元字符当作普通的字符 来进行匹配 l如;.匹配字符.第5页,共23页,编辑于2022年,星期六元字符(2)?匹配0或1个在它之前的那个字符l 如:r?t 只匹配 t和rt|两个匹配条件进行逻辑“或”运算l 如:(him|her)匹配匹配him或者或者her$匹配行结束符 l如:boy$匹配以boy为行结尾的字符串 匹配一行的开始 l如:boy 匹配以boy为行首的字符串第6页,共23页,编辑于2022年,星期六元字符(3)匹配括号中的任何一个一个字符l 如:raout 匹配匹配rat,rot,rutc1-c2 括号中可以使用连字符-来指定 字符的区间 l如:0-9 匹配 0,1,2,3,4,5,6,7,8,9c1-c2 匹配除了除了指定区间之外的字符(补集)l如:269A-C 匹配除了2,6,9,A,B,C以外的任何一一个个字符 第7页,共23页,编辑于2022年,星期六元字符(4)匹配词(word)的开始和结束 l 如:匹配breathe,但不匹配other()l 将(和)之间的表达式定义为“组”(group),并且将匹配这个表达式的字符保存到一个临时区域(一个正则表达式中最多可以保存9个),它们可以用 1 到9 的符号来引用。l:%s/(99)/1aa/g 将99替换成99aa第8页,共23页,编辑于2022年,星期六元字符(5)i 和和 i,jl匹配指定数目的字符,这些字符是在它之前的表达式定义的。l如:正则表达式A0-93 能够匹配字符“A”后面跟着正好3个数字字符的串,例如A123、A348等,但是不匹配A12a4。l正则表达式0-94,6 匹配连续的任意4个、5个或者6个数字字符。第9页,共23页,编辑于2022年,星期六主要内容正则表达式简介正则表达式匹配实例正则表达式应用第10页,共23页,编辑于2022年,星期六正则表达式的匹配(1)fo+l可以与目标对象中的“fool”,“fo”,或者“football”等在字母f后面连续出现一个或多个字母o的字符串相匹配 eg*l与目标对象中的“easy”,“ego”,或者“egg”等在字母e后面连续出现零个或多个字母g的字符串相匹配 Wil?l与目标对象中的”Win”,“Wilson”等在字母i后面连续出现零个或一个字母l的字符串相匹配 Jim2,6l规定字符m可以在匹配对象中连续出现2-6次,可以同jimmy或jimmmmmy等字符串相匹配第11页,共23页,编辑于2022年,星期六正则表达式的匹配(2)hell l以“hell”,“hello”或“hellhound”开头的字符串 ar$l以“car”,“bar”或“ar”结尾的字符串 A-ZlA到Z范围内任何一个大写字母相匹配 a-zl从a到z范围内任何一个小写字母相匹配 第12页,共23页,编辑于2022年,星期六正则表达式的匹配(3)0-9l从0到9范围内任何一个数字(a-zA-Z0-9)+l任何由字母和数字组成的字符串to|too|2 l与目标对象中的“to”,“too”,或“2”相匹配 A-Cl与目标对象中除A,B,和C之外的任何字符相匹配 第13页,共23页,编辑于2022年,星期六主要内容正则表达式简介正则表达式匹配实例正则表达式应用第14页,共23页,编辑于2022年,星期六正则表达式在find中的应用 find/dev/name tty0-9l在/dev下查找以tty开头,后面跟一个数字的文件第15页,共23页,编辑于2022年,星期六正则表达式在grep中的应用文本文件phone.txtFrancis,John 5-3871 Wong,Fred 4-4123 Jones,Thomas1-4122 Salazar,Richard5-2522 grep 命令1)grep S*R phone.txt2)grep JW phone.txt3)grep-v JW phone.txt4)grep M-Z phone.txt5)grep M-Z.*12 phone.txt 第16页,共23页,编辑于2022年,星期六正则表达式在vi中的应用Vi的替换命令l:ranges/pat1/pat2/lrange 是命令执行范围的指定 lpat1 查找的一个正则表达式 lpat2 这是希望把匹配串变成的模式的正则表达式 第17页,共23页,编辑于2022年,星期六正则表达式在vi中的应用-例1:%s/*/g 把一个或者多个空格替换为一个空格。:%s/*$/去掉行尾的所有空格。:%s/在每一行头上加入一个空格。:%s/0-90-9*/去掉行首的所有数字字符。:%s/baeiog/bug/g 将所有的bag、beg、big和bog改为bug。:%s/t(aou)g/h1t/g 将所有tag、tog和tug分别改为hat、hot和hug(注意用group的用法和使用1引用前面被匹配的字符)。第18页,共23页,编辑于2022年,星期六正则表达式在vi中的应用-例2将a,b,c的实例改为b,a,c之前之前10,7,2x+13,y-2,10bar(8),x+y+z,5之后之后7,10,2y-2,x+13,10 x+y+z,bar(8),5第19页,共23页,编辑于2022年,星期六正则表达式在vi中的应用-例2:%s/(,*),(,*),/2,1,/g 解释l,除了逗号之外的任何字符l,*0或者多个非逗号字符l(,*)将这些非逗号字符标记为1,这样可以在之后的替换模式表达式中引用它l(,*),我们必须找到0或者多个非逗号字符后面跟着一个逗号,并且非逗号字符那部分要标记出来以备后用。第20页,共23页,编辑于2022年,星期六正则表达式在vi中的应用-例3文本文件lBilly tried really hard Sally tried really really hard Timmy tried really really really hard Johnny tried really really really really hard转化为lBilly tried very hard Sally tried very hard Timmy tried very hard Johnny tried very hard第21页,共23页,编辑于2022年,星期六正则表达式在vi中的应用-例3:%s/(really)(really)*/very/表达式表达式(really)*匹配匹配0或多个连续的或多个连续的really(注意结尾有个(注意结尾有个空格),而空格),而(really)(really)*匹配匹配1个或多个连续的个或多个连续的really 实例。实例。第22页,共23页,编辑于2022年,星期六谢谢!第23页,共23页,编辑于2022年,星期六