看板 Perl 關於我們 聯絡資訊
※ 引述《JeffMcBride (帥啊!老皮)》之銘言: : 各位大大大家好 : 小弟在此板初來乍到若有冒犯請多多包含 : 我比較熟悉php但是拿到一段perl的程式碼 : 但是這個段落的部份 : 有個地方不是很了解..關於RE部份 : 下面紅色標記處 : 1. [=]中括號的等於 是表示什麼意思呢 標示會match 到'='這個字元符號 : 2. $2 在哪邊被定義出現的呢.. 假如 $theText = 'aaabbbb' if($theText =~/(a*)(b*)/) $1 就是第一個括弧match到的字串 也就是'aaa' $2 就是第二個括弧match到的字串 也就是'bbbb' 所以$1 $2 $3 ...分別是第幾個括弧match到的字串 : 3. $2/$to 這邊表示 兩個字串以 / 做連結嗎?? 不對 $theText =~ m/A/ 表示比對A字串 傳回結果,後面加上g就是全部比對 $theText =~ s/A/B/ 表示用B字串取代A字串,最後面加上g就是全部取代 沒加上g 只會取代一次 / 比對出一個結果 : 謝謝各位大大m(_ _)m : ------------- code ------------- : while ( $theText =~ m/([=\%\&]([A-Za-z0-9]{2}))/g ) : { : my $to = hex($2); : $to = chr($to); : if($2 ne "01") : { : $theText =~ s/[=\%]$2/$to/g; : } : } : -------------------------------- while要成立 必須match到m/([=\%\&]([A-Za-z0-9]{2}))/g 遇到 '=' or '%' or '&' 開頭,後面接上連續兩個是a-zA-Z0-9的字元 然後如果那連續兩個a-zA-Z0-9的字元不等於'01'的話 就把遇到 '=' or '%'開頭A後面接上連續兩個是a-zA-Z0-9的字元 取代成char(hex(那兩個字元) 不過這個程式寫的不好就是 先不談那個 範例 $theText = "=30=32%34"; 把30 32 34 從hex值轉成相對應的10進位 再轉成char 30->48= '0' 32->50= '2' 34->52= '4' 所以$theText 會從'30=32%34'變成 012 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.121.197.133 ※ 編輯: jjt 來自: 140.121.197.133 (01/02 19:50)
JeffMcBride:謝謝大大的範例:D perl越來越有趣 01/02 20:03
JeffMcBride:不過您埋下的伏筆.."這個程式寫的不好" 是為什麼呢.. 01/02 20:28
abliou:推樓上的!!我也想知道理由...XD 01/02 21:32