Perl入门学习——正则表达式处理文本

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可以处理多行模式,而不是每一行。


你可能感兴趣的:(Perl入门学习——正则表达式处理文本)