我正在尝试匹配任何字母字符和","或";"而我正在尝试使用" <:L>字母字符"根据文件https://docs.perl6.org/language/regexes。但是,编译器抱怨。不使用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>; ]>+ /;
非常感谢!!
答案 0 :(得分:5)
您无法在Enumerated Character Class(<alpha>
语法)中使用<[ ... ]>
之类的子规则。正确的枚举字符类的示例是<[abc]>
以匹配字符'a','b'或'c'。您编写了一个以<[ <alpha> ...
开头的枚举字符类。这枚举了字符'&lt;','a','l','p','h','a' - 然后编译器抱怨说“在字符类中意外发现重复字符(a)”
这样做的正确方法是什么
将相应的Unicode property(:L
)添加到包含,
和;
的枚举字符类中,如下所示:
say "a,b,c;d,e;xyz" ~~ / <+ :L + [,;] >+ /;
我们所链接的文档最接近于解释这个(超级简洁地)在“一个人可以写&lt;:Ll +:N&gt;”的位附近。请注意,关于空格的语法很有用。 (如果你弄错了,它通常会无法匹配。)
答案 1 :(得分:4)
您可以与&lt; alpha&gt;结合使用太:
say "a,b,c;d,e;xyz" ~~ m/ <[,;] + alpha>+ /
正如另一个答案中所提到的,Enumerated character classes文档描述了组合字符类。