正则表达式:我怎么能避免角色类?

时间:2012-05-17 07:21:14

标签: regex perl

是否可以在没有[^...]的情况下使用\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>";

1 个答案:

答案 0 :(得分: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>";

有多个积极的前瞻,他们都必须成功。所以它匹配一个不是字母而不是Mark而不是Decimal_Number而不是Connector_Punctuation的字符(.),就像否定的字符类一样。

我添加了/s修饰符,因为原始正则表达式会匹配换行符(尽管您的示例字符串没有)。我添加了/x,所以我可以添加一些空格并将其分成多行。

无论如何,你对角色课有什么看法?