Perl語言的文字處理模式之3(4)
發(fā)表時間:2024-06-12 來源:明輝站整理相關軟件相關文章人氣:
[摘要]范例三: $string="ww22cgi44"; $string=~s/(d+)/$1*2/e; (d+)代表要找尋$string中一個或是多個數(shù)值的字符串,再將找到的字符串設成 $1。加上參數(shù)e是代表要把$l*2當作是一個運算式,所以$string="...
范例三:
$string="ww22cgi44";
$string=~s/(d+)/$1*2/e;
(d+)代表要找尋$string中一個或是多個數(shù)值的字符串,再將找到的字符串設成
$1。加上參數(shù)e是代表要把$l*2當作是一個運算式,所以$string="www44cgi44";
$string="www22cgi44";
$string=~s/(d+)/$1*2/eg;
加上參數(shù)e,所以會把$1*2當作是一個運算式來看, 加上參數(shù)g就會把全部符合數(shù) 值
的字符串經(jīng)過運算式運算之后再把它取代,所以$string="www44cgi88";
范例四:
假設原本的字符串是$value="三八!",經(jīng)CGI數(shù)據(jù)編碼之后,這個字符串就會變成
$value="%A4T%A4K%21"。以下是一個解碼的示范程序:
$value="%A4T%A4K%2l";
$value=~s/%([a-fA-F0-9][a-fA-F0-9])/pack("C",hex($l))/eg;
在傳送CGI數(shù)據(jù)的時候會把數(shù)據(jù)編碼,其中會將特殊字符或是中文字符編碼成以% 開頭的連續(xù)兩個十六進制數(shù)的字符串,所以要用s這個函數(shù)來找尋這個以%開頭的 字符串。為了要把找到的字符串再做解碼的處理, 所以要在%這個符號之后加上 ()這個符號, 表示會把找到的字符串記憶起來并指定給$1這個變量,而且要在() 中加上代表是連續(xù)兩個十六進制數(shù)值的文字處理模式(Regular Expression),也 就是[a-fA-F0-9][a-fA-F0-9]。再用hex這個函數(shù)($1是代表符合的字符串)把十 六進制數(shù)值轉(zhuǎn)成十進制的碼,之后再用pack這個函數(shù)(以C為參數(shù),是代表 unsigned char value的意思)把這個十進制碼還原成原來的字符串。最后就會 把這個字符串解碼成$value="三八!"。值得一提的是也可以把這個解碼的程序 寫成:
$value=~s/%(..)/pack("C",hex($l))/eg;