Perl 6 capturing repeating matching groups separately?

狂风中的少年 提交于 2019-12-23 15:03:17

问题


I believe Perl 6 offers the capability of capturing repeating groups separately as opposed to earlier flavors where you could only capture the last group or the whole matched group string. Can someone please give a good example how to use this awesome feature of Perl 6? For e.g.

I need to capture all the matching groups for this regex

((?:(?:(?:(?:")(?:[^"]*?)")|(?:(?<!")(?:[^"]*?)(?!")))(?<!\\)\|)*) 

How do I do that in Perl 6?


回答1:


In general, if you quantify a capture, you simply get a list of all matches. Example:

$ perl6 -e '"abc" ~~ /<alpha>+/ and say $<alpha>.join(", ")'
a, b, c

works with positional captures too:

$ perl6 -e '"abc" ~~ /(\w)+/ and say $0.join(", ")'
a, b, c

Now you can just apply that to your own regex, which looks artificially convoluted. Is it generated in some way?



来源:https://stackoverflow.com/questions/10522302/perl-6-capturing-repeating-matching-groups-separately

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!