2016-10-20 4 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"; 

(私は文字列にリテラル\dを得るためにバックスラッシュをエスケープしなければならなかったことに注意してください。)

考慮すべきいくつかの他のものがあります。

  • は解釈されることになって$projectです正規表現として? (そうでない場合は、\Q\Eまたはquotemeta()にラップする必要があります)
  • $JIRA_regexはプレーンストリングでなければなりませんか?そうでなければ、正規表現オブジェクトにする方が簡単です。

その場合、より良い解決策は、次のようになります。