2015-04-03 90 views
0

我在perl的正則表達式中使用\k時遇到了一些困難。從以下幾行我需要獲得數據後pipemed_tb進入數組和跳過部分之前,任何人都可以幫助。如果可能的話,請告訴如何在下面的行中有效地使用\kPerl模式匹配和使用 k

set stimulusTop pipemed_tb.pipemed1.gtmc1.gthevcpar91.vncunit1 
    set stimulusTop pipemed_tb.pipemed1.gtmc1.gthevcpar91.vneunit1 
    set stimulusTop vprunit_tb.vprunit1 
+2

那你試試? – ysth 2015-04-03 22:45:01

+0

/\ k g */g這似乎不起作用 – 2015-04-03 22:56:43

回答

1

您必須混淆\k<n>反向引用和Perl \K比賽遺漏運營商的前面。這裏你不需要這個。

下面是一個示例程序(它的一部分是多餘的只用於說明目的):

my @vals =(); 
push(@vals, "set stimulusTop pipemed_tb.pipemed1.gtmc1.gthevcpar91.vncunit1"); 
push(@vals, "set stimulusTop pipemed_tb.pipemed1.gtmc1.gthevcpar91.vneunit1"); 
push(@vals, "set stimulusTop vprunit_tb.vprunit1"); 

foreach my $i (@vals) { 
    $i =~ s/set stimulusTop //g; 
    print $i."\n"; 
} 

輸出:

pipemed_tb.pipemed1.gtmc1.gthevcpar91.vncunit1                              
pipemed_tb.pipemed1.gtmc1.gthevcpar91.vneunit1                              
vprunit_tb.vprunit1 
+0

謝謝stribizhev。我感謝您的幫助。 – 2015-04-04 00:27:08

+0

也可以請你告訴如何替代。 (點)/(正斜槓)?我正在嘗試$ j =〜s /./// g;但它拋出一個錯誤 – 2015-04-04 00:45:36

+0

你需要像s /\./\// g'那樣轉義點和斜線。 – 2015-04-04 07:33:03