我想创建一个用户定义的“元音”字符类,它将与任何原义的英语元音字母(a,e,i,o,u)以及任何这些带有变音符号的字母匹配:ắḗú̱åų̄ẹ́等
这是我试图做的,但是没用:
> my $vowel = / <[aeiou]> <:Sk>* /
/ <[aeiou]> <:Sk>* /
> "áei" ~~ m:g/ <$vowel> /
(「e」 「i」)
答案 0 :(得分:9)
您可以尝试使用ignoremark:
:ignoremark或:m副词指示正则表达式引擎仅 比较基本字符,并忽略其他标记,例如合并 口音。
例如:
my $vowel = /:m<[aeiou]>/;
.say for "áeikj" ~~ m:g/ <$vowel> /;
输出:
「á」
「e」
「i」
答案 1 :(得分:9)
无法使用/ <[aeiou]> <:Sk>* /
将元音与组合字符匹配的原因是,Perl 6中的字符串是在字素级别上操作的。在该级别上,ų̄
已经仅仅是一个字符,而<[aeiou]>
作为字符类已经匹配了一个完整的字符。
正如霍恩在另一个答案中指出的那样,正确的解决方案是使用ignoremark
副词。您可以将其放在rx:m/ <[aeiou]> /
之类的正则表达式之前或内部,甚至可以使用:m
和:!m
在不同的位置打开和关闭它。