2017-03-17 70 views
0

我在正則表達式中創建了兩個命名的捕獲變量,第二個似乎沒有返回任何值,而第一個可以。我不知道爲什麼......這裏是代碼。Perl命名捕獲組

my $string = 'test [google] another test [windows]'; 

my $regex=qr/\w*\[{1}(?<firstBracket>\w+)\]{1}(?<secondBracket>\w*)/ip; 

$string=~ /$regex/; 

say $+{secondBracket}; 

我期待「secondBracket」將會返回。 我可以做$+{firstBracket},但不是第二個...有人可以幫忙嗎?

謝謝。

+4

空間不是在你的模式描述。量詞{1}無用,請刪除它們。 –

+5

不要在void上下文中使用'm //'。在使用任何捕獲變量之前,總是檢查匹配是否成功。 – melpomene

回答

3

你大概的意思是:

my $string = 'test [google] another test [windows]'; 

if($string =~ /.*?\[(?<firstBracket>\w+)\].*?\[(?<secondBracket>\w+)\]/i) { 
     say $+{firstBracket}; 
     say $+{secondBracket}; 
} 

輸出

google 
windows 

my $re = qr/.*?\[(?<firstBracket>\w+)\].*?\[(?<secondBracket>\w+)\]/i; 
if($string =~ $re) { 
    ... 
} 

具有相同的輸出...

+0

謝謝......我也意識到,我沒有包括第一支架和第二支架之間的空間!愚蠢 –