Perl6:如何在用户定义的字符类或范围中使用<alpha>?

lis*_*tor 3 regex range match perl6

我试图匹配任何字母字符和","或";" 我试图根据文档https://docs.perl6.org/language/regexes使用"<:L>字母字符" .但是,编译器抱怨.不使用a..zA..Z这样做的正确方法是什么?

say "a,b,c;d,e;xyz" ~~ m/ <[ <alpha> \, \; ]>+ /;
Run Code Online (Sandbox Code Playgroud)

错误信息:

Potential difficulties:
    Repeated character (a) unexpectedly found in character class
    at C:\Users\Guest\Documents/avg.pl:128
    ------> ay "a,b,c;d,e;xyz" ~~ m/ <[ <alpha> \, \<HERE>; ]>+ /;
Run Code Online (Sandbox Code Playgroud)

非常感谢你 !!

Bra*_*ert 5

你不能用一个分治像<alpha>内部枚举字符类(的<[ ... ]>语法).正确枚举字符类的一个示例是<[abc]>匹配字符'a','b'或'c'.你写了一个开始的枚举字符类<[ <alpha> ....这列举了字符'<','a','l','p','h','a' - 然后编译器抱怨说"在字符类中意外地发现了重复字符(a)".

什么是正确的方法

将相应的Unicode属性(:L)添加到包含,;类似的枚举字符类中:

say "a,b,c;d,e;xyz" ~~ / <+ :L + [,;] >+ /;
Run Code Online (Sandbox Code Playgroud)

我们所链接的文档最接近于解释这个(超级简洁地)在"一个人可以写<:Ll +:N>"的位附近.请注意,关于空格的语法很有用.(如果你弄错了,它通常会无法匹配.)