Learning Perl 第九章 用正则表达式处理文本 m//模式为文字查找功能,那么s///替换(substitution)操做符为查找并替换功能,此操做符只是把存在变量中匹配模式的那部分那天替换成另外一个字符串: $_ = "caoqing love wanghuan\n"; s/wanghuan/xiaobao/; print "$_\n"; 匹配失败,则变量不受影响。 模式字符串和替换字符串还能够更加复杂。 $_ = "green scaly dinosaur"; s/(\w+) (\w+)/$2, $1/; s/^/huge,/; s/,.*een//; s/green/red/; s/\w+$/($`!)$&/; s/\s+(!\W+)/$1/; s/huge/gigantic/; print "$_\n"; gigantic (huge!)dinosaur s///返回的是布尔值。 /g进行全局替换: $_ = "green scaly dinosaur"; s/\w+/cao/g; print "$_\n"; cao cao cao 缩减空格:s/\s+/ /g; 删除开头或结尾的空白符: s/^\s+//;s/\s+$//; 精简后为s/^\s+|\s+$//g; 像m//和qw//同样,能够改变s///定界符。对于没有左右之分的字符,用法和使用斜线一致。对于有左右之分的定界符,必须使用两对,分别包住模式和替换字符串。 s#cao#qing#; s{cao}{qing}; 可用替换操做符 除了/g外,能够使用在普通模式中的/i,/x以及/s修饰符。 绑定操做符,能够使用绑定操做符s///选择不一样的替换目标。 无损替换,先复制一份拷贝,再进行替换。 (my $copy = $original) =~ s/\d+ ribs?/10 ribs/; Perl5.14新增一个/r修饰符,保持原来变量不变,而把替换结果做为操做的返回值返回: use 5.014; my $copy = $original =~ s/\d+ ribs?/10 ribs/; 先替换再赋值。 大小写转换 \U会将其后全部的字符转换为大写的: $_ = "green scaly Dinosaur"; s/(green|dino)/\U$1/gi; print "$_"; GREEN scaly DINOsaur \L会将其后全部的字符转换为小写的: s/(green|dino)/\L$1/gi; \E会关闭大小写转换功能。 split操做符 split会根据给定模式拆分字符串。 my @field = split /separator/, $string; split操做符用拆分模式扫描指定的字符串并返回字段。 my @field = split /:/, "cao:qing:love:xiao:huan"; print "@field"; cao qing love xiao huan split会保留开头的空字段,却会舍弃结尾处的空字段。 若是须要在模式中使用分组匹配,在spilt里面使用非捕获(?:)的写法。 join函数 join函数会结合字符串 my $result = join $glue, @pieces; 第一个参数理解为胶水,能够是任意字符串,其他的参数则是一串片断。 my $x = join ":", 1..10; print "$x"; 1:2:3:4:5:6:7:8:9:10 胶水只出如今两个片断之间。胶水的层数会比列表的条目少一条。 列表上下文中的m// 非贪婪匹配+?,*?,{}?。 跨行的模式匹配/m能够处理多行模式,而不是每一行。