標籤:style blog color ar 使用 for sp 檔案 div
前幾天用到了Perl語言,主要看了一下Perl中的Regex,在各種網頁語言中,Regex在處理字串的時候十分有用,所以這裡就簡單說一下在Perl中Regex的應用。
先上代碼
1 #!/usr/bin/perl -w 2 #use utf8; 3 #use encoding "gb2312"; 4 5 open(DATA,"<test2.txt") or die "read error"; 6 7 open(OUT,">outfile.txt") or die "write error"; 8 %array=(); 9 while ($string =<DATA>){10 11 if ($string =~ /s.*.m/) {12 $string =~ s/s.*.m//g;13 14 }15 chomp($string); #去掉分行符號16 foreach $character(split / /,$string){17 if ($character =~ /\/d$/)18 {19 $array{$character}++;20 }#code21 }22 }23 print OUT "result:\n";24 @character = sort {$array{$b} <=> $array{$a} }( keys %array);25 foreach $character (@character){26 print OUT "$character => $array{$character}\n";27 }
簡單說一下就是,讀取檔案內容到字串,去掉分行符號,按空格分割(spilt),匹配到以s開頭,以m結束的字串,然後以空串替換之(刪除),匹配到以d結束的字串,存到數組中,最後按降序輸出到檔案。實際就是刪除s開頭,m結尾的單詞,找到所有以d結束的單詞,並統計。
Regex
(1)三種形式
匹配:m/<regexp>;/ (還可以簡寫為 /<regexp>;/ ,略去 m)
替換:s/<pattern>;/<replacement>;/
轉化:tr/<pattern>;/<replacemnt>;/
這三種形式和“=~”或“!~”搭配使用,分別表示匹配和不匹配,在上述代碼中用到了匹配符號。
(2)常用模式(pattern)
. 匹配除分行符號以外的所有字元
x? 匹配 0 次或一次 x 字串
x* 匹配 0 次或多次 x 字串,但匹配可能的最少次數
x+ 匹配 1 次或多次 x 字串,但匹配可能的最少次數
.* 匹配 0 次或一次的任何字元
.+ 匹配 1 次或多次的任何字元
{m} 匹配剛好是 m 個 的指定字串
{m,n} 匹配在 m個 以上 n個 以下 的指定字串
{m,} 匹配 m個 以上 的指定字串
[] 匹配符合 [] 內的字元
[^] 匹配不符合 [] 內的字元
[0-9] 匹配所有數字字元
[a-z] 匹配所有小寫字母字元
[^0-9] 匹配所有非數字字元
[^a-z] 匹配所有非小寫字母字元
^ 匹配字元開頭的字元
$ 匹配字元結尾的字元
\d 匹配一個數位字元,和 [0-9] 文法一樣
\d+ 匹配多個數字字串,和 [0-9]+ 文法一樣
\D 非數字,其他同 \d
\D+ 非數字,其他同 \d+
\w 英文字母或數位字串,和 [a-zA-Z0-9] 文法一樣
\w+ 和 [a-zA-Z0-9]+ 文法一樣
\W 非英文字母或數位字串,和 [^a-zA-Z0-9] 文法一樣
\W+ 和 [^a-zA-Z0-9]+ 文法一樣
\s 空格,和 [\n\t\r\f] 文法一樣
\s+ 和 [\n\t\r\f]+ 一樣
\S 非空格,和 [^\n\t\r\f] 文法一樣
\S+ 和 [^\n\t\r\f]+ 文法一樣
\b 匹配以英文字母,數字為邊界的字串
\B 匹配不以英文字母,數值為邊界的字串
a|b|c 匹配符合a字元 或是b字元 或是c字元 的字串
abc 匹配含有 abc 的字串
在匹配中要注意逸出字元的使用。Regex在處理字元時給我們提供很多便利,這裡只是介紹了最簡單的使用,並且發現字串中隱含的模式進行匹配也是需要我們注意的,以後還要在使用中多多地學習。
Perl中的正則表達