我有一个包含字符串的变量。
$name="mak -o create.pl -n create.txt";
现在我想匹配一个模式,我可以将其作为create.pl获取,后面将始终跟随-o。也就是说,这必须始终像“-o create.pl”那样发生。但是,不是“创建”,可能有任何这样的名称,但扩展名将永远是“.pl”
$name="mak -o string.pl -n create.txt"; # or it could be
$name="mak -o name.pl -n create.txt";
答案 0 :(得分:1)
`/-o ([^\s]*)\s/`
以上将做:
> echo "mak -o create.pl -n create.txt" | perl -lne 'm/-o ([^\s]*)\s/;print $1'
create.pl
答案 1 :(得分:1)
尝试按空格分割变量。
my $name="mak -o name.pl -n create.txt";
my @cmd = split (/\s+/, $name);
for (my $i = 0; $i <@cmd; $i++) {
if ($cmd[$i] eq "-o") {
print $cmd[$i+1];
last;
}
}
答案 2 :(得分:0)
试试这个正则表达式:
/-o\s(.*?)\.pl/
$1
将具有匹配的名称。
答案 3 :(得分:0)
使用split:不需要担心脚本名称,split会处理它。
use strict;
my $name="mak -o name.pl -n create.txt";
my $test = join( " ", (split /\s+/, $name)[1,2] );
print $test;
输出:
-o name.pl