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 文档描述了组合字符 类。
我正在尝试匹配任何字母字符和“,”或“;”我正在尝试根据文档 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 文档描述了组合字符 类。