Perl語言的文字處理模式之3(4)
發表時間:2024-02-09 來源:明輝站整理相關軟件相關文章人氣:
[摘要]范例三: $string="ww22cgi44"; $string=~s/(d+)/$1*2/e; (d+)代表要找尋$string中一個或是多個數值的字符串,再將找到的字符串設成 $1。加上參數e是代表要把$l*2當作是一個運算式,所以$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;