[^...]
これを なしで を使用して書くことは可能\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>";
まあ、それは可能ですが、私はそれを改善とは呼ばないと思います:
#!/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
空白を追加して複数行に分割できるように追加しました。
とにかく、文字クラスに対して何を持っていますか?