7

我有一个正则表达式,它解析应该是 Raku 的完全限定模块名称的字符串(见下文)。由于 Precomp 模块中似乎只使用了 auth、ver 和 api 版本,因此我只测试这些版本。

我需要将模块的名称与标识符分开。

我的正则表达式是:

my $rx := /
                       ^
                       $<name> = ( [ \w | '::' ] + )
                       [ ':' $<part> = ( [ 'ver' | 'auth' | 'api' ] )
                        \< ~ \> $<val> = ( .*? ) ]*
                       $
                      /;

问题是是否有一种标准方法可以匹配 Raku 模块或子模块,以便该正则表达式在将来不会成为错误。

4

2 回答 2

5

查看Raku 的语法,看起来它只是首先吃掉包定义中的所有副词,然后检查它们中的每一个,如果它是verauth或者apidie如果不是其中之一。

所以,我想说:不,目前没有匹配 Raku 模块名称的标准方法。

于 2020-07-23T17:02:23.210 回答
1

如果您使用 Zef::Identity 可能是最好的

use Zef::Identity;

say Zef::Identity.new( "WithApi:ver<0.0.2>:api<1>" ).hash;
# {api => 1, auth => , from => Perl6, name => WithApi, ver => 0.0.2}

它可能已经安装在您的系统中,因为它是 zef

于 2020-10-04T10:26:37.623 回答