本文介绍了Perl 命名捕获组的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

I have created two named capture variables in the regex and the second one doesn't seem to return any value while the first one can. I am not sure why..here is the code.

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

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

$string=~ /$regex/;

say $+{secondBracket};

我期待secondBracket"会回来.我可以做 $+{firstBracket},但不能做第二个...有人可以帮忙吗?

I am expecting that "secondBracket" will return.I can do $+{firstBracket}, but not the second one...Can someone help please?

谢谢.

推荐答案

你可能的意思是:

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 ) {
    ...
}

具有相同的输出...

这篇关于Perl 命名捕获组的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

10-23 22:46