加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

perl6 – 访问Perl 6中的匹配部分

发布时间:2020-12-16 06:21:27 所属栏目:大数据 来源:网络整理
导读:当我使用命名的正则表达式时,我可以打印其内容: my regex rgx { ww };my $string = 'abcd';$string ~~ / rgx /;say $rgx; # ?ab? 但是如果我想匹配:g或:ex adverb,那么有多个匹配,它就不起作用.下列 my regex rgx { ww };my $string = 'abcd';$string
当我使用命名的正则表达式时,我可以打印其内容:

my regex rgx { ww };
my $string = 'abcd';

$string ~~ / <rgx> /;
say $<rgx>; # ?ab?

但是如果我想匹配:g或:ex adverb,那么有多个匹配,它就不起作用.下列

my regex rgx { ww };
my $string = 'abcd';

$string ~~ m:g/ <rgx> /;
say $<rgx>; # incorrect

给出错误:

Type List does not support associative indexing.
  in block <unit> at test1.p6 line 5

我应该如何修改我的代码?

UPD:基于@ piojo的explanation,我修改了最后一行如下,这解决了我的问题:

say $/[$_]<rgx> for ^$/.elems;

以下会更容易,但由于某种原因它不起作用:

say $_<verb> for $/; # incorrect

解决方法

似乎:g和:重叠是特殊情况:如果您的匹配在正则表达式中重复,例如/< rgx> * /,那么您将访问匹配为$< rgx> [0],$< rgx&gt ; [1]等.但在这种情况下,引擎不止一次地进行整场比赛.因此,您可以通过顶级匹配运算符$/来访问这些匹配项.事实上,$< foo>只是$/< foo>的快捷方式.

因此,根据错误消息,我们知道在这种情况下,$/是一个列表.因此,我们可以将您的匹配作为$/ [0]< rgx>和$/ [1]< rgx>.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读