Re: [請益] 一段string matching的意思
: : 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/03 22:47, 1F
沒注意到 抱歉 >_< 修正
※ 編輯: jjt 來自: 140.121.197.133 (01/04 06:33)
推
01/05 14:12, , 2F
01/05 14:12, 2F
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 4 之 4 篇):