【问题标题】:Unicode property "Space" in Perl 5 and Perl 6Perl 5 和 Perl 6 中的 Unicode 属性“空格”
【发布时间】:2016-05-17 20:13:45
【问题描述】:

unicode-property \p{Space} 是 Perl5 扩展吗?

在 Perl5 中 Space 匹配所有空格

my $s = "one\ttwo\nthree";
$s =~ s/\p{Space}/*/g;
say $s;

# one*two*three

而在 Per6 中它可能只匹配一个简单的空格

my $s = "one\ttwo\nthree";
$s.=subst( /<:Space>/, '*', :g );
say $s;

# one     two
# three

【问题讨论】:

    标签: perl unicode whitespace raku


    【解决方案1】:

    制表符属于 Control 类别,而不是 Space。您感兴趣的属性实际上称为 White_Space,而这正是您需要在 Perl 6 中使用的:

    say so "\t" ~~ /<:White_Space>/
    

    似乎还有几种替代拼写可用,包括 WhiteSpaceWSpace 及其小写变体,但 不是 WS.

    还有一个内置规则 &lt;ws&gt;,它匹配零个或多个空白字符而不是单个字符,当然还有 \s,它已经使用 Unicode 语义。

    【讨论】:

    • 我已经用 &lt;:White_Space&gt; 替换了它,但我很好奇为什么 Space 在 Perl5/Perl6 中的行为不同。
    • @sid_com:只是 Perl5 选择将 \p{Space} 别名为 \p{White_Space=Y} 而不是 \p{General_Category=Space}
    • 或者更确切地说,\p{General_Category=Zs}
    • 哦,亲爱的。这种微妙的修正会带来多年的调试乐趣。
    【解决方案2】:

    它并不是真正的扩展,而是另一个 Unicode 属性\p{White_Space} 的简写名称。这在手册页perluniprops中有详细记录。

    我不知道 Perl6 的人在这里做什么。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-09
      • 1970-01-01
      • 1970-01-01
      • 2013-08-06
      • 2013-07-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多