2013-05-23 4 views
1

문자열이 포함 된 변수가 있습니다.Perl : 패턴 일치 필요

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

이제 항상 -o 다음에 오는 create.pl 값을 얻을 수있는 패턴을 일치시키고 싶습니다. 즉,이 이것이하지만 그 대신 "생성"이 같은 임의의 이름이 될 수 있지만, 확장자는 항상 ".pl로"

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

답변

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

위 할 것입니다 :

> echo "mak -o create.pl -n create.txt" | perl -lne 'm/-o ([^\s]*)\s/;print $1' 
create.pl 
+0

감사합니다 Vijay !! 당신은 항상 좋은 대답을 너무 빨리줍니다. 나는 또한 전에 물었습니다, 그 당시 당신은 매우 빨리 대답 할 사람이었습니다. 항상 당신의 지원에 감사드립니다 !!! :) –

0

것이 "-o create.pl"처럼 항상 발생하는 것이 필수이다 다음 정규식을 사용하십시오.

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

$1이 일치하는 이름을 갖습니다.

+0

감사합니다! –

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; 
    } 
} 
+0

+1 제안을 제안합니다. –

+0

감사합니다. Split를 사용하여 좋아하는 것. –

0

스플릿 사용 : 스크립트 이름에 대해 걱정할 필요가 없습니다. 스플릿이 처리합니다.

use strict; 

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

my $test = join(" ", (split /\s+/, $name)[1,2]); 

print $test; 

출력 : 귀하의 지원에 대한

-o name.pl 
+0

안녕하세요, 제 질문을받지 못했습니다. 문자열의 어느 위치 에나 배치 될 수 있기 때문에 안정적인 유일한 패턴은 "-o name.pl"패턴입니다. 그러나 이것에 따르면 그 위치에 특별한 가치가있을 것입니다. 지원해 주셔서 감사합니다. –

+0

맞아, 나는 이것을 얻지 못했지만, 지금은 그것을 얻었다. –