Re: [問題] 正規表示式置換
關於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
討論串 (同標題文章)
完整討論串 (本文為第 2 之 2 篇):
1
1
Perl 近期熱門文章
PTT數位生活區 即時熱門文章