1. 程式人生 > >正則表示式--處理文字

正則表示式--處理文字

-1-----------------------------------------------------------------------------------------------------------------
用s///進行替換
   s/// 找查並替換

   $_="test meng";
   if(s/test/wang/) #查詢並test並將其替換wang
   {
       print "$_\n";  
   }


 用/g全域性替換

   /g修飾符可讓s///進行所有可能的,不重複的替換

   $_="home, sweet home!";
   s/home/cave/g
; print "$_\n"; #print cave, sweet home!. s/^\s+//; #將開頭的空白字元替換成空白字串 s/\s+$//; #將結尾的空白字元替換成空白字串 s/^\s+|\s+$//g; #將開頭和結尾的空白字串替換成空白 -1----------------------------------------------------------------------------------------------------------------- -3------------------------------------------------------------------------------------- 不同的界定符: s
#^https://#http://#; s{fred}{barney}; s[fred][barney]; s<fred><barney>; 繫結操作符: $file =~ s#^.*##; 無損替換: my $orginal ='Fred ate 1 rib'; my $copy = $orginal; $copy =~ s/\d+ rib/10 rib/; 大小寫轉換: $_ = 'I saw Barney with Fred'; s/(Fred|Barney)/\U$1\E/gi; #BARNEY FRED $_='Fred BARNEY'
; s/(Fred|BARNEY)/\L$1\E/; #barney fred -3------------------------------------------------------------------------------------- -4------------------------------------------------------------------------------------- split操作符: 它會根據字串的模式來拆分字串,對於製表符,冒號,空白或任意符號分隔不同的欄位資料 的字串來說,用這個操作符分解提取相當方便。 my @fields = split /separator/,$string; my @fields = split /:/,"abc:def:g:h"; #result is qw(abc def g h); 如果兩個連續的分隔符連在一起,就會產生空欄位: my @fields = split /:/,"abc:def::g:h"; #result is ('abc','def','','g','h') 也可以利用split的/\s+/模式根據空白符分隔欄位,該模式把所有連續空白視作單單個空格並以 此切割。 my $some="This is a \t test.\n"; my @test = split /\s+/,$some; 預設split會以空白符分隔$_中的字串: my @t = split; #等效於split /\s+/,$_; -4------------------------------------------------------------------------------------- -5------------------------------------------------------------------------------------- join函式 與split用法相反,join是把這些片段接合成一個字串,join用法如下: my $result = join $glue,@pieces; my $x = join ":",4,6,8,10.12; #$x result is "4:6:8:10:12" -5------------------------------------------------------------------------------------- -6------------------------------------------------------------------------------------- 非貪婪量詞: 正則表示式引擎會一直行上述的回溯動,不斷以不同的方式調整模式匹配內容來適應字串, 直到最後找到一個整體匹配成功為止,要要直到最後都找不到宣告失敗。 好繁瑣。。。。 非貪婪量詞: ? +? #只匹配一次 跨行的的模式匹配: $_="I'm much better\nthan Barney is\nat bowling,\nWilma.\n"; if(/^wilma\b/im) { print "matched\n"; } 一次更新多個檔案: 更新多個檔案肯定是要備份原始檔,避免操作失誤可以進行還原。可以特殊變數來進行備份檔案: $^I #!/usr/bin/perl use strict; chomp(my $date=`date`); $^I='.bak'; while(<>) { s/test/hello/; s/phone//; print ; } 從命令列直接編輯: perl -p -i.bak -w -e 's/test/laomeng/g' test*.data -6-------------------------------------------------------------------------------------