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能夠處理多行模式,而不是每一行。
相關文章
相關標籤/搜索