Perl6:如何在用户定义字符 class 或范围内使用 <alpha>?

Perl6: how to use <alpha> in user-defined character class or range?

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

say "a,b,c;d,e;xyz" ~~ m/ <[ <alpha> \, \; ]>+ /;

错误信息:

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>; ]>+ /;

非常感谢!!

您不能在 Enumerated Character Class<[ ... ]> 语法)中使用 sub-rule 之类的 <alpha>。正确枚举字符 class 的示例是 <[abc]> 以匹配字符 'a'、'b' 或 'c'。您写了一个以 <[ <alpha> ... 开头的枚举字符 class。这枚举了字符 '<'、'a'、'l'、'p'、'h'、'a'——此时编译器抱怨说 "Repeated character (a) unexpectedly found in character class".

What is the proper way to do it

将适当的 Unicode property (:L) 添加到包含 ,; 的枚举字符 class 中,如下所示:

say "a,b,c;d,e;xyz" ~~ / <+ :L + [,;] >+ /;

我们都链接的文档最接近于在 "one can write <:Ll+:N>" 的位置附近(超级简洁地)解释这一点。请注意,语法对空格很挑剔。 (如果你弄错了,它通常会匹配失败。)

您也可以与 结合使用:

say "a,b,c;d,e;xyz" ~~ m/ <[,;] + alpha>+ /

如另一个答案中所述,Enumerated character classes 文档描述了组合字符 类。