Perl語言的文書處理模式之三(轉)
Perl語言的文書處理模式之三(轉)[@more@] 三、文書處理模式(Regular Expression)相關的運算子及函式 在perl程式寫作中常會用到=~和!~這兩個運算子及s和tr這二個函式來和文書處理模式/pattern/搭配而成一個運算式,如果能夠活用這些指令的話,就可以很輕易地來處理一些字串,當然在CGI程式設計中也就更能得心應手了。現在就讓作者來介紹這些運算子及函式的用法: -------------------------------------------------------------------------- 指令: /pattern/文字運算 說明:如果在文字運算中沒有使用=~或是!~運算子指定一個字串來做運算的話, 就會 使用內定的輸出變數$_來做/pattern/文字運算。範例一: $string="chmod7llcgi"; $string=~/(w+)s+(d+)/; 第一個(w+)是代表找尋數個字母,並將所找到的字串指派給$l這個變數,而s+代 表 找尋多個空白的字串,最後(d+)代表找尋數個數值,並將所找到的字串指派給 $2這 個變數。所以$l="chmod",$2=71l,但是$string還是等於原來的字串,沒有改變。範例二: $_="chmod71lcgi"; /(w+)s+(d+)/; 因為是把字串指定給$_這個變數,所以可以不用=~這個運算子就會得到 $l="chmod", $2=711;而且$_還是等於原來的字串,沒有改變。 範例三: $string="chmod71lcgi"; @list=split(/s+/,$string); 以一個或是多個空白字元來分割$string這個字串,這是一個很常用的語法。此時 @list=("chmod","7ll","cgi"); 指令: =~相配運算子 說明:這是Perl語言中特有的語法,通常會和文書處理模式來作運算。 範例: print"請輸入一個字串!n"; $string=<>; #<>代表標準輸入,會讓使用者輸入一字串 chop($string); #將$string最後一個換行的字元n刪除掉 if($string=~/cgi/){ print"輸入的字串中有cgi這個字串!n"; } 如果輸入的字串中含有cgi這個字串的話,就會顯示出這個資訊。 -------------------------------------------------------------------------- 指令:!~不相配運算子 說明:這也是Perl語言中特有的語法,通常會和文書處理模式來作運算。 範例: print"請輸入一個字串!n"; $string=<>; #<>代表標準輸入,會讓使用者輸入一字串 chop($string); #將$stdng最後一個換行的字元n刪除掉 if($string!~/cgi/){ print"輸入的字串中沒有cgi這個字串!n"; } 如果輸入的字串中沒有含有cgi這個字串的話,就會顯示出這個資訊。 -------------------------------------------------------------------------- 指令:tr轉換函式 語法:tr/SEARCHLIST/REPLACELIST/ 其中SEARCHLIST是要轉換的字元,REPLACELIST是轉換成何種字元。 說明:tr(translate)就是轉換的意思,會把符合轉換的字元轉換成要轉換的字元。 範例一: $string="test1ng"; $string=~tr/et/ET/;#此時$string="TEsTing"; $string=~tr/a-z/A-Z/;#此時$string="TESTING"; 範例二: $string="CGI+Perl"; $string=~tr/+//;#此時$string="CGI Perl"; 在傳送CGI資料的時候會先將資料編碼,其中會將空白的字元轉成+這個字元,所以 在 解碼的時候要把+這個字元還原成空白的字元。 指令:s取代函式 語法:s/PATTERN/REPLACE/eg 其中PATTERN是文書處理(Regular Expression)的模式,REPLACE是代表取代成何種文 字 模式。而g是這個函式最常用的引數,代表要把所有符合文字模式的字串 全部取 代,如果省略這個引數的話,則只取代一個符合文字模式的字串;而加上e這 個引數是代 表要將REPLACE的部分當成一個運算式,如果沒有這個需要的話,就不用加 上這個引數。 說明:將符合文書處理模式的字串取代成為要取代的字串。 範例一: $string="i;love;perl"; $string=~s/:/*/: #此時$string="i*love:perl"; $string=~s/:/*/g; #此時$string="i*love*perl"; $stiing=~s/*/+/g; #此時$string="i+love+perl"; $string=~s/+//g: #此時$string="i love perl"; 上一行也可寫成$string=~tr/+//;效果都會一樣哦! $string=~s/per1/cgi/; #此時$string="i love cgi"; 範例二: $string="i love per"; $string=~s/(love)//; 第一個()內所找到的字串變成$1,在這個範例中,會把變數love這個字串變成 <>,此時$string="i<>perl"; $string="i love per1"; $string=~s/(i)(perl)//; 在這個範例中,會把i變成<>,perl變成<>此時$string="<>love<>"; $striag="i love per1"; $string=~s/(w+)//g; (w+)代表找尋符合一個或是多個英文字元或是數值的字串,之後再將找到的字 符串設成$l。因為加上g這個引數,所以會找到字串中的這三個英文單字, 然後 再把這三個單字分別加上<>這個符號,此時$string="<><><>";範例三: $string="ww22cgi44"; $string=~s/(d+)/$1*2/e; (d+)代表要找尋$string中一個或是多個數值的字串,再將找到的字串設成 $1。加上引數e是代表要把$l*2當作是一個運算式,所以$string="www44cgi44"; $string="www22cgi44"; $string=~s/(d+)/$1*2/eg; 加上引數e,所以會把$1*2當作是一個運算式來看, 加上引數g就會把全部符合數 值 的字串經過運算式運算之後再把它取代,所以$string="www44cgi88"; 範例四: 假設原本的字串是$value="三八!",經CGI資料編碼之後,這個字串就會變成 $value="%A4T%A4K%21"。以下是一個解碼的示範程式: $value="%A4T%A4K%2l"; $value=~s/%([a-fA-F0-9][a-fA-F0-9])/pack("C",hex($l))/eg; 在傳送CGI資料的時候會把資料編碼,其中會將特殊字元或是中文字元編碼成以% 開頭的連續兩個十六進位制數的字串,所以要用s這個函式來找尋這個以%開頭的 字串。為了要把找到的字串再做解碼的處理, 所以要在%這個符號之後加上 ()這個符號, 表示會把找到的字串記憶起來並指定給$1這個變數,而且要在() 中加上代表是連續兩個十六進位制數值的文書處理模式(Regular Expression),也 就是[a-fA-F0-9][a-fA-F0-9]。再用hex這個函式($1是代表符合的字串)把十 六進位制數值轉成十進位制的碼,之後再用pack這個函式(以C為引數,是代表 unsigned char value的意思)把這個十進位制碼還原成原來的字串。最後就會 把這個字串解碼成$value="三八!"。值得一提的是也可以把這個解碼的程式 寫成: $value=~s/%(..)/pack("C",hex($l))/eg;
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/8225414/viewspace-943043/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Perl語言的文書處理模式之一(轉)模式
- Perl語言的文書處理模式之二(轉)模式
- 自然語言處理新天地(之三[1]) (轉)自然語言處理
- 自然語言處理新天地(之三[4]) (轉)自然語言處理
- Nisus Writer Pro for mac(多語言文書處理器)Mac
- Nisus Writer Pro for Mac多語言文書處理軟體Mac
- Mac多語言文書處理軟體——Nisus Writer Pro for MacMac
- 中國語文(自然語言處理)作業自然語言處理
- 大學書信選2(關於自然語言處理) (轉)自然語言處理
- C語言的本質(21)——預處理之三:其它預處理特性及總結C語言
- Linux下vi 文書處理軟體(轉)Linux
- perl處理中文
- perl 處理HTMLHTML
- Linux的文書處理軟體-vi《圖解》(轉)Linux圖解
- 語言處理器
- Python自然語言處理 1 語言處理與PythonPython自然語言處理
- iOS 文書處理相關iOS
- perl語言入門
- Perl 6 語言概述
- 自然語言處理(NLP)自然語言處理
- 自然語言處理新天地(之收藏者言) (轉)自然語言處理
- 「NLP」一文彙總自然語言處理主要研究方向自然語言處理
- 自然語言處理領域重要論文&資源全索引自然語言處理索引
- Perl語言學習(四)Perl控制結構
- Linux指令碼語言PERL 的模板應用分析(轉)Linux指令碼
- perl格式串處理整數溢位漏洞(轉)
- 自然語言處理中的語言模型預訓練方法自然語言處理模型
- perl中文處理問題
- 自然語言處理(NLP)概述自然語言處理
- 自然語言處理NLP(四)自然語言處理
- Python自然語言處理Python自然語言處理
- Go 語言異常處理Go
- 自然語言處理的最佳實踐自然語言處理
- NLP 與 NLU:從語言理解到語言處理
- Word文書處理教學--精確改變圖片的位置(轉)
- 【研究員視角】大牛帶你讀論文|自然語言處理自然語言處理
- Python自然語言處理 3 處理原始文字Python自然語言處理
- 【譯文】R語言中的缺失值處理R語言