2015-04-03 56 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