Perl:需要匹配模式

时间:2013-05-23 06:41:21

标签: regex perl split

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

$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";

4 个答案:

答案 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