利用正則表達(dá)式的模式定位部分字符串并做出相應(yīng)的修改。
m//模式匹配 是查找功能。
s///就是查找并替換的功能
s/barney/fred/;
#把barney替換為fred
用/g進(jìn)行全局替換
s///只會(huì)進(jìn)行一次替換。
s///g會(huì)進(jìn)行所有可能的,不重復(fù)的替換無(wú)損替換
需要同時(shí)保留原始字符串和替換后的字符串。
/r修飾符保留原來(lái)字符串變量中的值不變,把替換結(jié)果作為替換操作的返回值返回。
my $copy = $original =~ s/\d +ribs?/10/r
- 大小寫(xiě)轉(zhuǎn)換
/U轉(zhuǎn)義符把后面的所有字符都轉(zhuǎn)換為大寫(xiě)。
/L轉(zhuǎn)義符把后面的所有字符都轉(zhuǎn)換為小寫(xiě)。
/l和/u只會(huì)影響后面的一個(gè)字符
s/(fred | barney)/\u$1/ig;
split操作符
根據(jù)給定的模式拆分字符串,用拆分模式掃描指定的字符串并返回字段。如果有兩個(gè)分隔符連在一起,就會(huì)產(chǎn)生空字段。
my @fields = split /separator/,"abc:def::"
#得到("abc","def","")
- join函數(shù)
join函數(shù)和split相反,會(huì)把片段結(jié)合成一個(gè)字符串。
my $x = join ":",4,5,6,7;
#結(jié)果是"4:5:6:7"
更強(qiáng)大的正則表達(dá)式
- 非貪婪量詞(在貪婪量詞后面加?)
+? 在表示一次或多次的同時(shí),也表示匹配的字符串越短越好
/fred.+barney/
#正則表達(dá)式引擎的回溯動(dòng)作會(huì)很繁瑣
/fred.+?barney/
- 跨行的模式匹配
模式加上/m修飾符后,就可以用來(lái)匹配字符串內(nèi)的每一行。
open FILE,$filename
or die "can't open!";
my $lines = join ' ',<FILE>;
$lines =~ s/^/$filename: /gm;
從命令行直接編輯
perl -p -i.bak -w -e 's/Randall/Randal/g' fred*.dat
-p讓perl自動(dòng)生成一小段程序。
-i.bak是備份
-w開(kāi)啟警告
-e表面后面的是執(zhí)行的程序代碼