Re: [請益] 一段string matching的意思
※ 引述《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
01/02 20:03, 1F
推
01/02 20:28, , 2F
01/02 20:28, 2F
推
01/02 21:32, , 3F
01/02 21:32, 3F
討論串 (同標題文章)
Perl 近期熱門文章
PTT數位生活區 即時熱門文章