-1
我有Perl代碼如下(從一個較長的代碼摘錄):所以Perl的複雜的正則表達式搜索和替換嵌套表達式
//reg [1:0] d7 ,
// d8 ;
reg [1:0] d7_tmr0 ,
d8_tmr0 ;
reg [1:0] d7_tmr1 ,
d8_tmr1 ;
reg [1:0] d7_tmr2 ,
d8_tmr2 ;
到目前爲止:
use strict;
use warnings;
my %hash_all_dffs = (d6 => "1", d7 => "1", d8 => "1", d9 => "1");
#print %hash_all_dffs;
my $search = join("|", map {quotemeta} keys %hash_all_dffs);
$search = qr/\b($search)\b/;
#print $search;
# read all lines at once
$/ = "";
# read inline text and process
while (<DATA>) {
# search for match pattern, do replacement
$_ =~ s/(?:module.*?\(.*?\)\s*;)(*SKIP)(*F)|\breg\b\s*(\[\s*\d+\s*\:\s*\d+\s*\])?(\s*\b$search\b\s*,)*?\s*\b$search\b\s*;
/my $tmp4 = $&;
my $tmp50 = $&;
my $tmp51 = $&;
my $tmp52 = $&;
$tmp4 =~ s,\n,\n\/\/,gs;
$tmp50 =~ s,($search),$2_tmr0,gs;
$tmp51 =~ s,($search),$2_tmr1,gs;
$tmp52 =~ s,($search),$2_tmr2,gs;
"\/\/".$tmp4."\n".$tmp50."\n".$tmp51."\n".$tmp52."\n"
/gesx;
print;
}
__DATA__
reg [1:0] d7 ,
d8 ;
輸出是下面的文字好(也許醜陋,但> _ <)。
我的意圖: 我想在輸出的末尾添加一些額外的文本,而新的東西就像是(Verilog的TMR冗餘碼):
assign d7_tmrvote = (d7_tmr0 & d7_tmr1) | (d7_tmr0 & d7_tmr2) | (d7_tmr1 & d7_tmr2);
assign d8_tmrvote = (d8_tmr0 & d8_tmr1) | (d8_tmr0 & d8_tmr2) | (d8_tmr1 & d8_tmr2);
如果只有一個reg
聲明在原文中(即只有d7
或只有d8
),它是相當簡單的(儘管如此)做我想要的。
問題:然而,困擾我的問題是可能有一個或兩個或更多的reg
聲明,即。可能有d7
和d8
(顯示在我的代碼中),或者可能是(d7
,d8
,d9
,d10
, d11
....)。似乎我將不得不將它們存儲到某種臨時變量來幫助替換,但我不知道如何在s///gsex
正則表達式。我希望我能做到這一點,而不必對原始代碼進行大修改。
有沒有人有任何建議?在此先感謝〜