3

[^...]これを なしで を使用して書くことは可能\P{...}ですか?

#!/usr/bin/env perl 
use warnings;
use 5.012;
use utf8;

my $string = '_${Hello}?${World}!';

$string =~ s/[^\p{Alphabetic}\p{Mark}\p{Decimal_Number}\p{Connector_Punctuation}]/-/g; 

say "<$string>";
4

1 に答える 1

6

まあ、それは可能ですが、私はそれを改善とは呼ばないと思います:

#!/usr/bin/env perl
use warnings;
use 5.012;
use utf8;

my $string = '_${Hello}?${World}!';

$string =~ s/(?=\P{Alphabetic})
             (?=\P{Mark})
             (?=\P{Decimal_Number})
             (?=\P{Connector_Punctuation}) . /-/xgs;

say "<$string>";

複数の前向きな先見性により、それらはすべて成功する必要があります。.したがって、否定文字クラスと同様に、Alphabetic でも Mark でも Decimal_Number でも Connector_Punctuation でもない1 文字 ( ) に一致します。

元の正規表現は改行に一致するため、修飾子を追加しました/s(ただし、サンプル文字列には改行がありません)。/x空白を追加して複数行に分割できるように追加しました。

とにかく、文字クラスに対して何を持っていますか?

于 2012-05-17T07:49:16.223 に答える