1、 perl 模式匹配 总结 正则表达式perl 模式匹配Practiacl Extraction and Report Language一模式匹配操作符1tr/ / / 替换操作符不支持正则表达式 也不具备双引号替换能力m/ / s/ / / 都支持正则表达式,并且可以提供或限制双引号替换能力(当用单引号作为操作符时则不具备变量替换能力)s/ / / , tr/ / / 可以用两组不同的括号进行分割,以保证格式清晰 s(good)2绑定操作符 = , !,m/ / s/ / / tr/ / / 都支持绑定操作符的优先级非常高3. perl 特有的全局变量1. $ , $/g 修饰词的返回值列表
2、环境 : 返回所有匹配字串的列表如: my perls = $string = m/perl/ig ; 如果有捕获圆括号,则返回捕获到的字串如: 用字串 $string = “password=xyzzy verbose=9 score=0”初始化下面的散列:%hash = password = “xyzzy”, verbose = 9, socre=0;%hash = $string = /(w+)=(w+)/g ;标量环境中 /g 表示一次渐进的匹配, 它令 perl 从上一次匹配停下来的位置开始一次新的匹配 如: while (/perl/g) print “ $三s/ / / 操作符(
3、替换)返回值:标量环境里返回值是成功替换的次数替换部分被当作双引号看待可进行变量转换,而且可以使用前半部分模式匹配得到的变量$1,$2,$3 $ # 丢弃开头的空白s/s$/; # 丢弃结尾的空白s/s+/g; # 丢弃中间的空白把逗号放到整数的合理位置$_ = “12345678”;1 while s/(d)(ddd)(?!d)/$1,$2/;Print “$_ n” # 输出: 12,345,678四Tr/ / / 操作符 (转换)1tr 不支持正则表达式 和 变量替换,只是一种单纯的划定范围的替换尽管不支持变量替换,但可以用 eval expr 实现$count = eval “tr/$
4、oldStr/$newStr/”;Die if $;如果仅仅是转换大小写不要使用 tr/ / / 建议使用双引号里的 转移字符 /U /L 类似的 uc lc 函数2修饰词,与 m/ / s/ / / 的修饰词不同/c 与 searchlist 为补/s 消除重复的字符/d 删除找到的但没有替换的字符 ,任何再 searchlist 中声明但再 replacement没有给出替换的字符将被删除。如果没有/d 修饰词,那么1),replacement 比 searchlist 短,则将复制 replacement 最后一个字符直到足够长2),replacement 为空,则 replacemen
5、t = searchlist 可以用此用法统计次数和/s 压缩$string = tr/a-zA-Z/s # bookkeeper - bokeper五元字符12 个元字符 | ( ) $ * + ? : 在字符集中 表示补集 1,2,3 除了 1,2,3在一般的模式中表示 以什么开头$ : 表示以什么结尾六量词 分为最大量词,最小量词(由?控制)1最大量词* 匹配 0 或更多次 匹配 1 或更多次 ? 匹配 1 或 0 次count匹配 count 次min, 匹配至少 min 次 min,max 匹配至少 min 次,但不超过 max 次2最小量词*? 匹配 0 次或更多次?匹配 1 次或更多次?匹配 0 次或 1 次min,? 匹配最多 min 次min,max? 匹配至少 min 次,但不超过 max 次七常用的字母数字正则元符号. 通配符匹配除了换行符外的任何单字符(如果加上修饰词/s 也可以匹配换行符)d 数字 0-9D 非数字s 空格S 非空格w 字 a-zA-Z0-9_W 非字E 结束大小写或掩码l 把下一个字符变成小写 u 大写L 把E 以前的字母都变成小写 U 大写 如: s/revision/u$