早教吧 育儿知识 作业答案 考试题库 百科 知识分享

PERL正则匹配中使用变量的问题两个句子:my$sentence1="ADDFX2\add1rootbit32csau1/fourcsa15to12/add442/U13(.A(resultA[15]),.B(resultB[15]),.CI(\add1rootbit32csau1/fourcsa15to12/add442/carry[3]),.CO(\bit32csa

题目详情
PERL 正则匹配中使用变量的问题
两个句子:my $sentence1=" ADDFX2 \add_1_root_bit32_csa_u1/four_csa_15to12/add_44_2/U1_3 ( .A( resultA[15]),.B(resultB[15]),.CI( \add_1_root_bit32_csa_u1/four_csa_15to12/add_44_2/carry[3] ),.CO( \bit32_csa_u1/four_csa_15to12/one_cout ),.S( \bit32_csa_u1/four_csa_15to12/one_sum [3]) )";
my $sentence2="AOI22X1 U1493 ( .A0(\bit32_csa_u1/four_csa_23to20/zero_sum [1]),.A1(n495),.B0(\bit32_csa_u1/four_csa_23to20/one_sum [1]),.B1(n1772),.Y(n498) )";
my @AOI22X1=qw(A0 A1 B0 B1);
my @ADDFX2=qw(A B CI);
这两句,想把resultA[15]替换成my $a=resultA15_r,
把\bit32_csa_u1/four_csa_23to20/zero_sum [1]替换成$b=\bit32_csa_u1/four_csa_23to20/zero_sum1_r
这两个只是其中两句,还有大量的替换,被替换的量可以用正则匹配匹配出来的,成功的,要替换的结果也有变量可以表示,但是替换就是不成功啊.
foreach my $i(@ADDFX2){
$sentence1=~m/^.+ \.$i \( \s*(.)\s* \) /x;
foreach my $w(@wire){
\x05 if ($1 eq $w){
\x05\x05
\x05\x05 my $new=&gen_newname($w);
\x05\x05 $sentence1=~s/$w/$new/;
\x05\x05 $sent1=$sentence1;
\x05\x05 }
\x05\x05else {
\x05\x05 $sent1=$sentence1;
\x05\x05}
\x05\x05
\x05}
\x05}
▼优质解答
答案和解析
# 将 $sentence1=~s/$w/$new/; 改成
$sentence1 =~ s/\Q$w\E/\Q$new\E/g;

你其实可以将

if ($1 eq $w){
 my $new=&gen_newname($w);
 $sentence1=~s/$w/$new/; 
 $sent1=$sentence1;
}
else {
   $sent1=$sentence1;
}

改成

$sentence1 =~ s{$w}{gen_newname($w)}eg if $w eq $1;
$sent1 = $sentence1;