Perl语言入门(第五版) 读书笔记(四)---正则表达式
第七章~第九章? 正则表达式 1. 元字符? ?点(.)匹配除换行符的任意字符; 反斜线()用于转义 2. 量词 ?(*)零次或多次?? (+)一次或者多次?? (?)可有可无?? a{2,4}匹配a字符2-4次 ?量词都为贪婪量词,即会尽可能多的匹配;? 后面加上?则变为非贪婪量词 3. 模式分组 ?()用来分组?? 1 2 引用分组 ?$_ = "yabba dabba";??? if(/y(....) d1/) {} 4. 择一匹配 或(|) ?/fred( +|t+)barney/ 匹配单词中间有空格或制表符 5. 字符集 ?[abc]? [a-zA-Z]? [^d] 6. 模式匹配 m//,m(),m[],m{}都行,用m//时可以简写为// 7. 可选修饰符 ?/i 大小写无关匹配?? ??if(/yes/i){} ?/s 匹配任意字符,此时点(.)号可以匹配换行符 ??$_ = "barneyn withnfred";? if(/barney.*fred/s){} ?/x 加入空白 ??/-?d+.?d*/???? #挤在一起 ??/-? d+ .? d*/? #分开能看的清除些 ?/m 匹配多行 ?$text = "Fred dropped a 5 ton rock"; ?my @words = ($test =~ /([a-z]+)/ig); ?print "@wordsn";? #"Fred dropped a ton rock" 8. 锚位 ?^行首? $行尾?? ?d单词锚位?? /bnameb/ 匹配name,不匹配namespace 9. 匹配(=~)?? 不匹配(!~) 10. 模式串内插 ?$what = "name"; /^($what)/ <=> /^(name)/ 11. 捕获变量 ?$_ = "Hello there,neighbor"; ?if(/(S+) (S+) (S+)/) {print "words are $1 $2 $3 n";} ?关闭捕获变量(?:),但是仍然占位$N?? if(/(?:Hello) (S+)/) ?给捕获变量命名(?<LABEL>PATTERN),访问时用$+{LABEL}? if(/?<name1>S+/) {say "$+{name1}";} 12. 自动匹配变量 ?$` : 匹配起始位置之前略过的串 ?$& : 匹配模式整个串 ?$' : 匹配结束位置之后的串 ?if("Hello there,neighbor" =~ /s(w+),/) { ?print "That was ($`)($&)($')n"; }???? #输出结果为(Hello)( there,)( neighbor) 13. 优先级 ?圆括号 > 量词 >? 锚位和序列 > 择一 > 元素 14. 替换与修饰符 ?s{__END__.*}{}s;??????????? # 删除掉__END__标记后的内容 ?$filename = s/^s+|s+$//g; # /g表示全局替换?? /i /x /s和前述的意义相同 15. 大小写替换 ?U 将其后的内容全部转换为大写?? s/(fred|barney)/U$1/gi; #FRED ?L 将其后内容全部转换为小写???? s/(Fred|Barney)/L$1/gi; #fred ?E 结束其后字符的大小写转换???? s/(Fred)(Barney)/U$1E $2/gi; #FRED barney ?u 将其后第一个字符转换为大写?? s/(fred|barney)/uL$1/gi; #Fred ?l 将其后第一个字符转换为小写?? print "Hello,Lu$name n"; 16. split操作符可以使用正则表达式 ?@fields = split /:/,"::a:b:c::";? #得到("","","a","b","c"),会自动保留开头的空字段,去掉结尾的空字段 17. join函数连接字符串 ?my $str = join "-",@array ; (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |