4

これらの 2 つの置換は常に同じ結果をもたらしますか?

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

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

1 に答える 1

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によってインストールされます。


注:/uまたはがないとuse 5.012;\sNBSP と一致しない場合があります。


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}andはorが使用されている[\h\v]場合にのみ同等です。/uuse 5.012;

チケット #114220

状態:

  • /\h//[\h]/5.10、5.12、5.14、および 5.18と同等
  • /\h//[\h]/5.16.0と同等ではありません
  • 5.16.1については知りません
于 2012-07-20T14:50:49.007 に答える