2016-10-20 3 views
-2

패턴에서 변수를 사용하는 방법은 무엇입니까?perl은 패턴 정규 표현식에서 변수를 사용합니다.

내가이 원하는하십시오 :

my $project="SDK" //or something that i will get it after calling some function. 
my $JIRA_regex = '(^|)($project)-(\d+)'; 
print "pattern = $JIRA_regex\n"; 

출력은 좋지 않다 :

(^|)($project)-(\d+) 

당신을 :) 감사

1 - 네,이 $ 프로젝트를 사용하려면, 일치하는 문자열 값 또는 정규 표현식 :

2 - $ JIRA_regex가 코드에서 더 일치합니다.

은 잘 지금 작동하는 내 코드입니다 :

my $repo=$ARGV[0]; 
my $comment=$ARGV[1]; 

my $project_pattern="[A-Z]{2,5}"; 

if ($repo =~ "test1.git" or $repo =~ "test2.git") 
{ 
    $project_pattern = "\QSDK\E"; 
} 

my $JIRA_regex = "(^|)($project_pattern)-(\\d+)"; 

if ($comment =~ /$JIRA_regex/m) 
{ 
    print "matched $2-$3\n"; 
} 
else 
{ 
    print "not matched\n"; 
} 

답변

3

작은 따옴표는 변수를 보간하지 않는다; 큰 따옴표를 사용하십시오.

my $project = "SDK"; # or whatever 
my $JIRA_regex = "(^|)($project)-(\\d+)"; 
print "pattern = $JIRA_regex\n"; 

(I 문자열에 문자 \d을 얻을 수있는 백 슬래시를 탈출했다합니다.) 고려해야 할 몇 가지 다른 일이 있습니다

:

  • $project가 해석하는데는 정규식으로? (아마도 그렇지 않은 경우 \Q\E 또는 quotemeta()으로 묶어야합니다.)
  • $JIRA_regex은 일반 문자열이어야합니까? 그렇지 않다면 regex 객체로 만드는 것이 더 쉽습니다.

하는 경우 더 나은 솔루션은 다음과 같습니다

관련 문제