正则表达式 – 如何用代码点而不是字形替换Perl 6中的字符串?

前端之家收集整理的这篇文章主要介绍了正则表达式 – 如何用代码点而不是字形替换Perl 6中的字符串?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我需要使用Perl 6从字符串中删除变音符号.我尝试这样做:
my $hum = 'חוּם';
$ahm.subst(/<-[\c[HEBREW LETTER ALEF] .. \c[HEBREW LETTER TAV]]>/,'',:g);

我想删除所有不在HEBREW LETTER ALEF(א)和HEBREW LETTER TAV(ת)之间的字符.我希望以下代码返回“חום”,但它返回“חם”.

我想发生的事情就是默认情况下Perl 6的工作原理是字形,认为它是一个字形,并删除所有字母.通过字形工作通常是明智的,但在我的情况下,我需要通过代码点来工作.

我试图找到一个可以让它通过codepoint工作但不能找到它的副词.也许在Perl 6中还有一种方法可以使用Unicode属性来排除变音符号,或者只包含字母,但我也找不到.

谢谢!

我的正则表达式很弱,所以我会采用一种不那么神奇的解决方案.

首先,您可以通过samemark删除所有标记

'חוּם'.samemark('a')

其次,您可以通过.NFD分解字形并对各个代码点进行操作 – 例如,只保留具有属性Grapheme_Base的值 – 然后重新构造字符串:

Uni.new('חוּם'.NFD.grep(*.uniprop('Grapheme_Base'))).Str

对于混合字符串,希伯来字符的剥离标记只能如下所示:

$str.subst(:g,/<:Script<Hebrew>>+/,*.Str.samemark('a'));

猜你在找的正则表达式相关文章