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> ; [1]等.但在这种情况下,引擎不止一次地进行整场比赛.因此,您可以通过顶级匹配运算符$/来访问这些匹配项.事实上,$< foo>只是$/< foo>的快捷方式.
因此,根据错误消息,我们知道在这种情况下,$/是一个列表.因此,我们可以将您的匹配作为$/ [0]< rgx>和$/ [1]< rgx>. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |