簡體   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