删除空格:Unicode属性 - 字符类

时间:2012-07-20 14:42:33

标签: regex perl

这两个替换总是产生相同的结果吗?

$data =~ s/\p{Space}//g;

$data =~ s/[\h\v]//g;

1 个答案:

答案 0 :(得分:4)

$ diff -U0 \
      <( unichars -au '\p{Space}' ) \
      <( unichars -au '[\h\v]'    ) \
   && echo No differences
No differences

对比
$ diff -U0 \
      <( unichars -au '\p{Space}' ) \
      <( unichars -au '\s'        ) \
   && echo No differences
--- /dev/fd/63  2012-07-20 11:28:33.356934588 -0400
+++ /dev/fd/62  2012-07-20 11:28:33.356934588 -0400
@@ -3 +2,0 @@
- ---- U+0000B LINE TABULATION
不过,

\s很快就会开始包括U + 000B。

unicharsUnicode::Tussle安装。


注意:如果没有/uuse 5.012;\s有时与NBSP不匹配。


我刚刚在Perl(5.16.0)中发现了一个错误。立即报告。

$ perl -le'print "\xA0" =~ /\p{Space}/ ?1:0'
1

$ perl -le'print "\xA0" =~ /\s/ ?1:0'
0

$ perl -le'print "\xA0" =~ /\s/u ?1:0'
1
                                         __
$ perl -le'print "\xA0" =~ /\h/ ?1:0'      \
1                                           \
                                             > huh??
$ perl -le'print "\xA0" =~ /[\h]/ ?1:0'     /
0                                        __/

$ perl -le'print "\xA0" =~ /[\h]/u ?1:0'
1

这意味着,不,\p{Space}[\h\v]仅在使用/uuse 5.012;时才是等效的。

Ticket #114220

状态:

  • /\h/相当于5.10,5.12,5.14和5.18中的/[\h]/
  • /\h/不等同于5.16.0
  • 中的/[\h]/
  • 不知道5.16.1
相关问题