これらの 2 つの置換は常に同じ結果をもたらしますか?
$data =~ s/\p{Space}//g;
$data =~ s/[\h\v]//g;
はい。
$ 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 が含まれ始める可能性があります。
unichars
Unicode::Tussleによってインストールされます。
注:/u
またはがないとuse 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}
andはorが使用されている[\h\v]
場合にのみ同等です。/u
use 5.012;
状態:
/\h/
/[\h]/
5.10、5.12、5.14、および 5.18と同等/\h/
/[\h]/
5.16.0と同等ではありません