Perl正则表达式
元字符: 元字符的含义是具有特殊含义的字符,即为元字符,元字符包括'.',点号能够匹配所有的单字符,但是换行字符除外'n', 简易量词 记载匹配正则表达式的时候有些需要重复的字符或者字符串,我们在表示这种重复的形式的时候,即是量词,我们知道的量词有'+'表示至少重复一次,'*'表示重复一次或者一次 以上,'?'指的是重复一次或者一次也没有 模式分组 我们使用小括号来作为一个单元来进行匹配,例如/(fred)*/即是检测在$_中是否包含了fred字符串或者没有fred字符串,不管怎么说,fred都是作为一个整体存在的 $_="a1bbd";#该正则表达式的含义是匹配$_中字符'b'和'a'之间相隔一个字符,或者没有,重点是有字符的话必须是一个 if(/a.b/) { print "it amtched 1n"; } if(/a.*b/)#该正则表达式的含义是a和b之间有或者没有字符都行,之间字符的数量,和字符是什么都没关系 { print "it amtched 2n"; } if(/a.+b/)#该正则表达式的含义是a和b之间必须有一个或者一个以上字符,该字符是什么没关系 { print "it matched 3 n"; } if(/a.?b/)#该正则表达式的含义是a和b之间必须有一个字符或者没有字符 { print "it matched 4 n"; } 反向引用 我们能够使用反响引用圆括号中匹配的文字,即所谓反向引用,而"1","2"即是反向引用的写法 反向引用不必一定在圆括号的后面可以是 出了这样我们还可以嵌套使用反向引用,2 1就是这意思 $_="yabba dabba doo"; if(/y(.)(.)21/)#这样匹配的就是abba { ? ?print "it matched"; } 这样里面的(.)2意思也是重复一遍,但因为是在1的里面所以使用了2 $_="yabba dabba doo"; if(/y((.)(.)32) d1/)#这样匹配的是yabba dabba { print "it matched4n"; #单如果在反向引用的后面需要加上数字怎么办?比如 $_="yaa2"; if(/y(.)12/)#我想匹配的是yaa2,而不是第十二组 { print "it matched5n"; } #解决问题的思路就是使用g{1}来代替1 if(/y(.)g{1}2/) { print "it matched6n"; } 择一匹配 $_="john or betty"; if(/john (and|or) betty/) { print "it matched1n";#必须匹配的是john and betty 或者john or betty} if(/john( +|t+)or/) { print "it matched2n";#在john和在or之间必须有一次或者多次以上的空格,或者一次或者多次的水平制表符 } 字符集 字符集指的是遗传可能出现的字符集合,通过写在方括号内来表示[],只是匹配单个字符,但可以是字符集中的任何一个,例如字符集 [abcwxyz],会匹配这7个字符中的任何一个虽然这样也是一样的[a-cw-z], $_="The HAL-9000 requires authorization to continue"; if(/HAL-[0-9]+/) { ? ?print "it print string that some model of HAL-compute"; } 字符集简写 任意数字的字符集[0-9]可以被简写成d,因此上面关于HAL-的模式可以匹配成/HAL-d/ [a-zA-Z0-9_]是使用w来进行简写的,如果单词中只含有数字,字母和下划线的话,可以使用w s简写擅长处理空白,它相当于[ftnr]包括5中空白的字符集:换页,制表,换行,及空格我们一般使用s*来匹配任意数量的空白 还有就是h简写匹配的是横向空包,也就是[t ]水平制表符和空格 v是纵向空白的匹配,[fnr] R能够匹配任何类型的断行 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |