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

看板Perl作者 (jet)時間16年前 (2008/01/03 12:13), 編輯推噓2(200)
留言2則, 1人參與, 最新討論串4/4 (看更多)
: : 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; : : } : : } : : -------------------------------- : → JeffMcBride:謝謝大大的範例:D perl越來越有趣 01/02 20:03 : 推 JeffMcBride:不過您埋下的伏筆.."這個程式寫的不好" 是為什麼呢.. 01/02 20:28 : 推 abliou:推樓上的!!我也想知道理由...XD 01/02 21:32 這樣寫雖然是對的 可是我看不習慣XD m//g的用法 http://perldoc.perl.org/perlop.html#Regexp-Quote-Like-Operators 簡單說有兩種 1. 把match到的字串放到一個array $line = 'ptt 2007 01'; @data = $line=~/(\w+)/g; #$data[0]='ptt' $data[1]='2007' $data[2]='01' 2. 計算match到的字串出現的次數 $line = 'ptt 2007 01'; while($line=~/(\w)/g) { $count++; } #$count=9 原po的寫法很厲害,我去看了m//g的說明才知道可以這樣用 因為只要把g拿掉 這個程式就有機會無限迴圈了 並且while裡面的 m//g 最外面的大括弧是多餘的 沒必要用到$2 把前一個括弧拿掉 後面改成$1 還有%& 前面不需要加上 \ & 後面沒用到所以最一開始就不用去搜尋他 我的話會這樣寫,會比較慢 但是沒有if while $theText=~s/01/&01/g; $theText =~ s/[=%](\w{2})/chr(hex($1))/eg; $theText=~s/&01/01/g; 這樣寫的好處就不多了,原po的方法修正一下 把一些match用不到的地方去掉,就不錯了 (看來我越來越呆了) -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.121.197.133

01/03 22:47, , 1F
你這樣會把%01也換成=01?
01/03 22:47, 1F
沒注意到 抱歉 >_< 修正 ※ 編輯: jjt 來自: 140.121.197.133 (01/04 06:33)

01/05 14:12, , 2F
你好像誤會我意思了 XD
01/05 14:12, 2F
文章代碼(AID): #17V63Uk6 (Perl)
文章代碼(AID): #17V63Uk6 (Perl)