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 的字符(the ),就像否定字符类一样。

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

无论如何,你有什么反对角色课程的?

于 2012-05-17T07:49:16.223 回答