Perl被命名为捕获组

时间:2017-03-17 22:35:31

标签: regex perl

我在正则表达式中创建了两个命名的捕获变量,第二个似乎没有返回任何值,而第一个可以。我不知道为什么......代码是什么。

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

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

$string=~ /$regex/;

say $+{secondBracket};

我期待&#34; secondBracket&#34;将返回。 我可以做$+{firstBracket},但不能做第二个......有人可以帮忙吗?

感谢。

1 个答案:

答案 0 :(得分: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 ) {
    ...
}

具有相同的输出......