2017-04-21 51 views
0

我的脚本如下所示。删除perl中的多个子字符串来自perl的字符串

my $temp='abc.ifb "BATCHRANGE=110000198" def'; 
my $temp1=reverse $temp;  
my $temp2=substr($temp1,0,index($temp1,'"'));  
my $task=reverse $temp2;  
my $task1=substr($task,1);  
print "\n my task is $task1 \n";  
my $temp3 = '.ifb'; 
my $ifb = substr($temp, 0, index($temp, $temp3)+4);  
print "\n my ifb is $ifb \n";  
$temp =~ s/$ifb //;  
$temp =~ s/$task1 //;  
print "\n now temp is $temp \n"; 

其实我想分别捕获三个字符串。但最终打印显示“BATCHRANGE = 110000198”def。而我期待“BATCHRANGE = 110000198”。这里有什么问题?

+1

可以通过'space'分裂。你对此有任何疑问。 – ssr1012

回答

1

有什么不对?您在$task1此处有一个空格:s/$task1 //

与正则表达式中的溶液:

my $temp='abc.ifb "BATCHRANGE=110000198" def'; 
my($ifb, $temp, $task); 
if ($temp =~ m/^(.+\.ifb)\s+("[^"]*")\s+(.+)$/) { 
    ($ifb, $temp, $task) = ($1, $2, $3); 
    print "My ifb is '$ifb'\n"; 
    print "My temp is '$temp'\n"; 
    print "My task is '$task'\n"; 
} 
else { 
    print "Wrong format\n"; 
} 

=>

My ifb is 'abc.ifb' 
My temp is '"BATCHRANGE=110000198"' 
My task is 'def' 
+0

工作完美! – GSG

+0

很高兴能帮到你!我编辑了我的答案,以便它还包含脚本中的确切问题。 –

+0

谢谢队友!很好的帮助:) – GSG