作者flu (Crazy Rhythm)
看板Perl
标题Re: [问题] 正规表示式置换
时间Tue Feb 11 02:51:07 2020
关於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://webptt.com/cn.aspx?n=bbs/Perl/M.1581360669.A.1FA.html