是否可以在不使用 [^...]
而使用 \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,就像取反字符类一样。
我添加了 /s
修饰符,因为原始正则表达式会匹配换行符(尽管您的示例字符串没有换行符)。我添加了 /x
这样我就可以添加一些空格并将它分成多行。
无论如何,你有什么反对字符类的?
关于正则表达式:我怎样才能避免使用字符类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10631499/