gpt4 book ai didi

regex - Perl 6 POSIX 字符类是否尊重 LOCALE?

转载 作者:行者123 更新时间:2023-12-02 09:04:30 25 4
gpt4 key购买 nike

Perl 6 POSIX 字符类是否尊重 LOCALE?我正在玩一个程序,该程序将打印与 POSIX char 类匹配的所有字符,并且无论我设置什么区域设置,它似乎总是打印相同的集合。如果我的区域设置是 en_US.US-ASCII,我仍然会得到 520 位左右的数字。同样令人烦恼的是,在 Mac 上执行此操作意味着我没有在其他地方找到的很酷的区域设置探索工具(或者,它们以不同的名称存在)。

这就是这个命令下的所有内容,我需要将其制作成 shell 别名:

$ perl6 -e 'say join " ", map *.gist, $*VM, $*PERL, $*DISTRO, $*KERNEL'
moar (2016.10) Perl 6 (6.c) macosx (10.10.5) darwin (14.5.0)

并且,该程序:

my $properties = set( <
alnum alpha ascii blank cntrl digit graph lower print graph punct
space upper word xdigit
> );

sub MAIN ( Str $property where * ∈ $properties = 'digit' ) {
say "NAME is " ~ %*ENV<NAME>;
say "LC_CTYPE is " ~ ( %*ENV<LC_CTYPE> // %*ENV<LC_ALL> );
say "property is $property";
use MONKEY-SEE-NO-EVAL;


my $pattern = EVAL "rx/ <$property> /";
say "regex is " ~ $pattern.gist;

show_chars( $pattern );
}

sub show_chars ( Regex $pattern ) {
for 0 .. 0x10FFFF -> $codepoint {
state $count = 0;
LAST { say "\nThere were $count characters" }
my $char = chr( $codepoint );
next unless $char ~~ $pattern;
$count++;

print "$char ";
print "\n" if $count %% 50;
}
}

请注意,我在程序中做了一个愚蠢的 EVAL 操作。我一直在寻找 rx 中变量插值的替代品。 S05 表明它是一个东西,但没有相关文档,所以我猜它不是。我开始探索自己的代币,但不得不继续前进。而且,现在我问了a separate question about the interpolation .

最佳答案

据我所知,Perl 6 正则表达式不支持 POSIX 字符类。您提到的内置方法映射到 Unicode 属性或 block (或类似的构造,请原谅我对 Unicode 的无知),并且它们都不是特定于区域设置的。

就EVAL而言,你可以像这样摆脱它:

my $re_string = '<alpha>';
say 'a' ~~ rx / <$re_string> /;

关于regex - Perl 6 POSIX 字符类是否尊重 LOCALE?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40863736/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com