用正則表達(dá)式處理文本

利用正則表達(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í)行的程序代碼

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容