繁体   English   中英

Perl6将正则表达式匹配组分配给变量

[英]Perl6 assign regex match groups to variables

在P5中,我能够做到这样的事情

my ($var1, $var2, $var3) = $string =~ /(.+)\\s(.+)\\s(.+)/;

我如何在Perl 6中做同样的事情? 如果我使用相同的语法,$ var1将保存整个$ string值。

该匹配的结果是一个Match对象,它本身不会像列表一样,因此不会扩展为三个变量。 但是,Match对象具有“list”方法,可以执行您想要的操作。 这是一个例子:

my $string = "hello how are you";
my ($var1, $var2, $var3) =
    ($string ~~ /(.+)\s(.+)\s(.+)/).list;
say "$var1 and $var2 and $var3
# Output: hello how and are and you

还有一些要指出的事情:

  • 由于。+是一个贪婪的匹配,它也接受空格,第一个捕获将吃掉两个单词。
  • 当然问题中的代码是一个简化的例子,但如果你需要将文本分成单词,也许words方法可以满足你的需要。 当然,你需要检查你想要什么:用空格分割? 只返回字母字符,以便句点和逗号不在最终结果中? 等等
  • 如果你确实需要多次匹配相同的东西,也许comb方法实际上更有帮助吗?
my $string = 'foo bar baz';

my $match = $string ~~ /(.+)\s(.+)\s(.+)/;
say $match;     # 'foo bar baz'
say $match[0];  # 'foo'
say $match[1];  # 'bar'
say $match[2];  # 'baz'

my ($foo, $bar, $baz) = @$match;
say $foo;       # 'foo'
say $bar;       # 'bar'
say $baz;       # 'baz'

因此

my ($foo, $bar, $baz) = @($string ~~ /(.+)\s(.+)\s(.+)/);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM