Re: [問題] 正規表示式置換

看板Perl作者 (Crazy Rhythm)時間4年前 (2020/02/11 02:51), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串2/2 (看更多)
關於Q1的為什麼的部份,用一個簡化的例子如下來說明: --------------------------------------------- use strict; use warnings; $_ = q[1(23)4-abc] ; # my $s = q[1(23)4-abc-1234] ; if( $_ =~ /([\d)(]*)-\w+/ ){ # $1 will get "1(23)4" printf "%s\n", ( $_ =~ m/$1/ ? 'Y' : 'N' ) ; } __END__ # result N # if the same RegExp is tested against $s, the result is Y ----------------------------------------------- 簡單地說,出現在 m// 中$1所含的()是被當作特殊用途的括號解釋的 ※ 引述《jacky1989 ()》之銘言: : 兩個問題 : 第一個問題 : $_=abc(.apple(bb),.orange(aa)); : 原字串大概長這樣 : 今天我要把orange取代掉 : if($_ =~ /([,]*\.orange\(\w*\))[,]*/){ : $_ =~ s/$1/\/\*$1\*\//; 上面這行的兩個 $1 內涵是不同的。 實際表現就是當第一個有含值,但"解釋後的pat"結果無法match時, 第二個 $1 會變 undef,"use warnings"會在這邊發出警告 : print "$_"; : } : 原本預期新的字串要長這樣 : abc(.apple(bb)/*,.orange(aa)*/); : 可是實際上卻沒有變,還是原來的字串,怎麼會這樣子? -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 122.118.26.249 (臺灣) ※ 文章網址: https://www.ptt.cc/bbs/Perl/M.1581360669.A.1FA.html
文章代碼(AID): #1UGQOT7w (Perl)
文章代碼(AID): #1UGQOT7w (Perl)