模式匹配(正则表达式).ppt_第1页
模式匹配(正则表达式).ppt_第2页
模式匹配(正则表达式).ppt_第3页
模式匹配(正则表达式).ppt_第4页
模式匹配(正则表达式).ppt_第5页
免费预览已结束,剩余50页可下载查看

下载本文档

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

文档简介

Perl语言程序设计 正则表达式 RegularExpression 一 简介 模式指在字符串中寻找的特定序列的字符 由斜线包含 def 即模式def 其用法如结合函数split将字符串用某模式分成多个单词 array split line 二 匹配操作符 检验匹配是否成功 result var abc 若在该字符串中找到了该模式 则返回非零值 即true 不匹配则返回0 即false 则相反 这两个操作符适于条件控制中 如 if question please print Thankyouforbeingpolite n else print Thatwasnotverypolite n 三 模式中的特殊字符 PERL在模式中支持一些特殊字符 可以起到一些特殊的作用 1 字符 意味着一个或多个相同的字符 如 de f 指def deef deeeeef等 它尽量匹配尽可能多的相同字符 如 ab 在字符串abbc中匹配的将是abb 而不是ab 当一行中各单词间的空格多于一个时 可以如下分割 array split line 注 split函数每次遇到分割模式 总是开始一个新单词 1 若 line以空格打头 则 array的第一个元素即为空元素 但其可以区分是否真有单词 2 若 line中只有空格 则 array则为空数组 且上例中TAB字符被当作一个单词 注意修正 2 字符 和 意味着匹配一组字符中的一个 如 a 0123456789 c 将匹配a加数字加c的字符串 与 联合使用例 d eE f 匹配def dEf deef dEf dEEEeeeEef等 表示除其之外的所有字符 如 d eE f 匹配d加非e字符加f的字符串 3 字符 和 它们与 类似 区别在于 匹配0个 1个或多个相同字符 匹配0个或1个该字符 如 de f 匹配df def deeeef等 de f 匹配df或def 4 转义字符如果你想在模式中包含通常被看作特殊意义的字符 须在其前加斜线 如 中 即表示字符 而不是上面提到的一个或多个字符的含义 斜线的表示为 在PERL5中可用字符对 Q和 E来转义 5 匹配任意字母或数字上面提到模式 a 0123456789 c 匹配字母a加任意数字加c的字符串 另一种表示方法为 a 0 9 c 类似的 a z 表示任意小写字母 A Z 表示任意大写字母 任意大小写字母 数字的表示方法为 0 9a zA Z 6 锚模式 例1 def 只匹配以def打头的字符串 def 只匹配以def结尾的字符串 def 只匹配字符串def A和 Z在多行匹配时与 和 不同 例2 检验变量名的类型 if varname A Za z 0 9a zA Z print varnameisalegalscalarvariable n elsif varname A Za z 0 9a zA Z print varnameisalegalarrayvariable n elsif varname A Za z 0 9a zA Z print varnameisalegalfilevariable n else print Idon tunderstandwhat varnameis n 例3 b在单词边界匹配 bdef 匹配def和defghi等以def打头的单词 但不匹配abcdef def b 匹配def和abcdef等以def结尾的单词 但不匹配defghi bdef b 只匹配字符串def 注意 bdef 可匹配 defghi 因为 并不被看作是单词的部分 例4 B在单词内部匹配 Bdef 匹配abcdef等 但不匹配def def B 匹配defghi等 Bdef B 匹配cdefg abcdefghi等 但不匹配def defghi abcdef 7 模式中的变量替换 将句子分成单词 pattern t words split pattern line 8 字符范围转义 例 da z 匹配任意数字或小写字母 9 匹配任意字符字符 匹配除换行外的所有字符 通常与 合用 10 匹配指定数目的字符字符对 指定所匹配字符的出现次数 如 de 1 3 f 匹配def deef和deeef de 3 f 匹配deeef de 3 f 匹配不少于3个e在d和f之间 de 0 3 f 匹配不多于3个e在d和f之间 11 指定选项字符 指定两个或多个选择来匹配模式 如 def ghi 匹配def或ghi 例 检验数字表示合法性if number d 0 xX da fA F print numberisalegalinteger n else print numberisnotalegalinteger n 其中 d 匹配十进制数字 0 xX da fA F 匹配十六进制数字 12 模式的部分重用当模式中匹配相同的部分出现多次时 可用括号括起来 用 n来多次引用 以简化表达式 d 2 W d 2 1 d 2 匹配 12 05 9226 11 87070492等注意 d 2 W d 2 1 d 2 不同于 d 2 W 1 2 1 后者只匹配形如17 17 17的字符串 而不匹配17 05 91等 13 转义和特定字符的执行次序 象操作符一样 转义和特定字符也有执行次序 14 指定模式定界符缺省的 模式定界符为反斜线 但其可用字母m自行指定 如 m u jqpublic perl prog1 等价于 u jqpublic perl prog1 注 当用字母 作为定界符时 不做变量替换 当用特殊字符作为定界符时 其转义功能或特殊功能即不能使用 15 模式次序变量在模式匹配后调用重用部分的结果可用变量 n 全部的结果用变量 nowtotalpart 25 11 四 模式匹配选项 1 匹配所有可能的模式 g选项 matches balata a g now matches ba la ta 匹配的循环 while balata a g match 结果为 balata当使用了选项g时 可用函数pos来控制下次匹配的偏移 offset pos string pos string newoffset 2 忽略大小写 i选项 例 de i匹配de dE De和DE 3 将字符串看作多行 m选项 在此情况下 符号匹配字符串的起始或新的一行的起始 符号匹配任意行的末尾 4 只执行一次变量替换例 var 1 line while var var 每次均匹配 1 5 将字符串看作单行例 a bc s匹配字符串axxxxx nxxxxbc 但 a bc 则不匹配该字符串 6 在模式中忽略空格 d 2 W d 2 1 d 2 x等价于 d 2 W d 2 1 d 2 五 替换操作符 语法为s pattern replacement 其效果为将字符串中与pattern匹配的部分换成replacement 如 string abc123def string s 123 456 now string abc456def 在替换部分可使用模式次序变量 n 如s d 1 但在替换部分不支持模式的特殊字符 如 等 如s abc def 将把abc替换为 def 替换操作符的选项如下表 注 e选项把替换部分的字符串看作表达式 在替换之前先计算其值 如 string 0abc1 string s a zA Z now string 0abcabc1 六 翻译操作符 这是另一种替换方式 语法如 tr string1 string2 同样 string2为替换部分 但其效果是把string1中的第一个字符替换为string2中的第一个字符 把string1中的第二个字符替换为string2中的第二个字符 依此类推 如 string abcdefghicba string tr abc def nowstring defdefghifed 当string1比string2长时 其多余字符替换为string2的最后一个字符 当string1中同一个字符出现多次时 将使用第一个替换字符 翻译操作符的选项如下 如 string tr d c 把所有非数字字符替换为空格 string tr t d 删除tab和空格 string tr 0 9 cs 把数字间的其它字符替换为一个空格 七 扩展模式匹配 PERL支持PERL4和标准UNIX模式匹配操作所没有的一些模式匹配能力 其语法为 pattern 其中c是一个字符 pattern是起作用的模式或子模式 1 不存贮括号内的匹配内容在PERL的模式中 括号内的子模式将存贮在内存中 此功能即取消存贮该括号内的匹配内容 如 a b c d e f 1 中的 1表示已匹配的d或e 而不是a或b或c 2 内嵌模式选项通常模式选项置于其后 有四个选项 i m s x可以内嵌使用 语法为 option pattern 等价于 pattern option 3 肯定的和否定的预见匹配肯定的预见匹配语法为 pattern string 其意义为匹配后面为string的模式 相反的 string 意义为匹配后面非string的模式 如 string 25abc8 string abc 0 9 matched 为已匹配的模式 此处为abc 而不是abc8 4 模式注释PERL5中可以在模式中用 来加注释 如 if string i a z 2 3 matchtwoorthreealphabeticcharacters 正则表达式的三种形式正则表达式中的常用模式正则表达式的8大原则 小结 正则表达式是Perl语言的一大特色 也是Perl程序中的一点难点 不过如果大家能够很好的掌握他 就可以轻易地用正则表达式来完成字符串处理的任务 当然在CGI程序设计中就更能得心应手了 下面列出一些正则表达式书写时的一些基本语法规则 1正则表达式的三种形式 正则表达式有三种存在形式 他们分别是 匹配 m 还可以简写为 略去m 替换 s 转化 tr 这三种形式一般都和 或 搭配使用 其中 表示相匹配 在整条语句中读作does 表示不匹配 在整条语句中读作doesn t 并在左侧有待处理的标量变量 如果没有该变量和 操作符 则默认为处理 变量中的内容 举例如下 str IlovePerl str m Perl 表示如果在 str中发现 Perl 字符串 则返回 1 否则返回 0 str s Perl BASH 表示将变量 str中的 Perl 字符串替换为 BASH 如果发生此替换则返回 1 否则返回 0 str tr A Z a z 表示将变量 str中的所有大写字母转化为小写字母 如果转化发生了则返回 0 否则返回 1 另外还有 foreach array s a b 此处每次循环将从 array数组中取出一个元素存放在 变量中 并对 进行替换处理 while printif m error 这一句稍微复杂一些 他将打印FILE文件中所有包含error字符串的行 Perl的正则表达式中如果出现 则发生匹配或替换后 内的模式被Perl解释器自动依次赋给系统 1 2 请看下面的例子 string Iloveperl string s love 此时 1 love 并且该替换的结果将 string变是为 Iperl string iloveperl string s i perl 2 这里 1 i 2 love 3 perl 并且替换后 string变为 love 替换操作s 还可以在末尾加上e或g参数 他们的含义分别为 s g表示把待处理字符串中所有符合的模式全部替换为字符串 而不是只替换第一个出现的模式 s e表示将把部分当作一个运算符 这个参数用的不多 比如下面的例子 string i love perl string s 此时 string i love perl string i love perl string s g 此时 string i love perl string tr 此时 string iloveperl string www22cgi44 string s d 1 2 e d 代表 string中的一个或多个数字字符 将这些数字字符执行 2的操作 因此最后 string变成了 www44cgi88 下面给出一个完整的例子 usr bin perlprint 请输入一个字符串 n string 代表标准输入 会让使用者输入一字符串chop string 将 string最后一个换行的字符 n删除掉if string perl print 输入的字符串中有perl这个字符串 n 如果输入的字符串含有perl这个字符串的话 就会显示后面的提示信息 2正则表达式中的常用模式 下面是正则表达式中的一些常用模式 pattern 结果 匹配除换行符以外的所有字符x 匹配0次或一次x字符串x 匹配0次或多次x字符串 但匹配可能的最少次数x 匹配1次或多次x字符串 但匹配可能的最少次数 匹配0次或一次的任何字符 匹配1次或多次的任何字符 m 匹配刚好是m个的指定字符串 m n 匹配在m个以上n个以下的指定字符串 m 匹配m个以上的指定字符串 匹配符合 内的字符 匹配不符合 内的字符 0 9 匹配所有数字字符 a z 匹配所有小写字母字符 0 9 匹配所有非数字字符 a z 匹配所有非小写字母字符 匹配字符开头的字符 匹配字符结尾的字符 d 匹配一个数字的字符 和 0 9 语法一样 d 匹配多个数字字符串 和 0 9 语法一样 D 非数字 其他同 d D 非数字 其他同 d w 一个英文字母或数字的字符串 和 a zA Z 0 9 语法一样 w 多个英文字母或数字的字符串 和 a zA Z 0 9 语法一样 W 非一个英文字母或数字的字符串 和 a zA Z0 9 语法一样 W 非多个英文字母或数字的字符串 和 a zA Z 0 9 语法一样 s 空格 和 n t r f 语法一样 s 多个空格和 n t r f 一样 S 非空格 和 n t r f 语法一样 S 和 n t r f 语法一样 b 匹配以英文字母 数字为边界的字符串 B 匹配不以英文字母 数值为边界的字符串a b c匹配符合a字符或是b字符或是c字符的字符串abc 匹配含有abc的字符串 pattern 这个符号会记住所找寻到的字符串 是一个很实用的语法 第一个 内所找到的字符串变成 1这个变量或是 1变量 第二个 内所找到的字符串变成 2这个变量或是 2变量 以此类推下去 pattern i i这个参数表示忽略英文大小写 也就是在匹配字符串的时候 不考虑英文的大小写问题 如果要在pattern模式中找寻一个特殊字符 如 则要在这个字符前加上 符号 这样才会让特殊字符失效 下面给出一些例子 范例说明 perl 找到含有perl的字符串 perl 找到开头是perl的字符串 perl 找到结尾是perl的字符串 c g i 找到含有c或g或i的字符串 cg 2 4 i 找到c后面跟着2个到4个g 再跟着i的字符串 cg 2 i 找到c后面跟着2个以上g 再跟着i的字符串 cg 2 i 找到c后面跟着2个g 再跟着i的字符串 cg i 找到c后面跟着0个或多个g 再跟着i的字符串 如同 cg 0 i cg i 找到c后面跟着一个以上g 再跟着i的字符串 如同 cg 1 i cg i 找到c后面跟着0个或是1个g 再跟着i的字符串 如同 cg 0 1 i c i 找到c后面跟着一个任意字符 再跟着i的字符串 c i 找到c后面跟着二个任意字符 再跟着i的字符串 cgi 找到符合有这三个字符任意一个的字符串 cgi 找到没有这三个字符中任意一个的字符串 d 找寻符合数字的字符 可以使用 d 来表示一个或是多个数字组成的字符串 D 找寻符合不是数字的字符 可以使用 D 来表示一个或是更多个非数字组成的字符串 找寻符合 这个字符 因为 在常规表达式中有它的特殊意思 所以要在这个特殊符号前加上 符号 这样才会让这个特殊字符失效 abc i 找寻符合abc的字符串而且不考虑这些字符串的大小写 3正则表达式的八大原则 Perl语言由于有正则表达式这个功能 所以对字符串的处理能力非常强 在用Perl语言进行生物信息分析程序中 经常可以看到正则表达式的运用 正则表达式是初学Perl的难点所在 不过只要一旦掌握其语法 就

温馨提示

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

评论

0/150

提交评论