1

我有一个包含字符串的变量。

$name="mak -o create.pl -n create.txt";

现在我想匹配一个模式,在该模式中我可以得到 create.pl 的值,它后面总是跟着 -o。也就是说,这是强制性的,这将始终像这样“-o create.pl”但不是“create”,而是可以有任何这样的名称,但扩展名将始终是“.pl”

$name="mak -o string.pl -n create.txt"; # or it could be
$name="mak -o name.pl -n create.txt";
4

4 回答 4

1
`/-o ([^\s]*)\s/`

以上将做:

> echo "mak -o create.pl -n create.txt" | perl -lne 'm/-o ([^\s]*)\s/;print $1'
create.pl
于 2013-05-23T06:49:24.953 回答
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;
    }
}
于 2013-05-23T06:50:34.177 回答
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   
于 2013-05-23T07:02:08.093 回答
0

试试这个正则表达式:

/-o\s(.*?)\.pl/

$1将具有匹配的名称。

于 2013-05-23T06:44:30.957 回答