Re: [請益] 一段string matching的意思

看板Perl作者 (jet)時間17年前 (2008/01/02 19:44), 編輯推噓2(201)
留言3則, 2人參與, 最新討論串3/4 (看更多)
※ 引述《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)

01/02 20:03, , 1F
謝謝大大的範例:D perl越來越有趣
01/02 20:03, 1F

01/02 20:28, , 2F
不過您埋下的伏筆.."這個程式寫的不好" 是為什麼呢..
01/02 20:28, 2F

01/02 21:32, , 3F
推樓上的!!我也想知道理由...XD
01/02 21:32, 3F
文章代碼(AID): #17UtajfL (Perl)
文章代碼(AID): #17UtajfL (Perl)