加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-14 06:23:53 所属栏目:百科 来源:网络整理
导读:我需要使用Perl 6从字符串中删除变音符号.我尝试这样做: my $hum = '????';$ahm.subst(/-[c[HEBREW LETTER ALEF] .. c[HEBREW LETTER TAV]]/,'',:g); 我想删除所有不在HEBREW LETTER ALEF(?)和HEBREW LETTER TAV(?)之间的字符.我希望以下代码返回“???”,
我需要使用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'));

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读