我正在尝试从字符串中删除某些表情符号,但我无法弄清楚如何匹配由特殊字符和字母组成的表情符号,例如:D或:-D(它适用于表情符号,如“: - ” )“)。我试过了
$message =~ s/\:D//;
以及其他一些变化,但似乎没有任何效果。我哪里错了?
编辑:我实际上是愚蠢的,并没有意识到我在此命令之前将所有字母都设为小写,因此所有表情符号都已更改为“:d”。谢谢你的帮助。答案 0 :(得分:3)
use strict; use warnings;
my $s = "Hello ;-) :D :-D <3 World!";
my @emoticons = qw' ;-) :D :-D <3 ';
my $pat = join '|', map qr/\Q$_\E/, @emoticons;
$s =~ s/$pat//g;
$s =~ s/ +/ /g;
print "$s\n";
输出:
Hello World!
答案 1 :(得分:2)
您可以编写一些单元测试:
sub assert_equals($$) {
my ($expected, $actual) = @_;
$expected eq $actual or die "expected <$expected>, got <$actual>\n";
}
sub no_smilies($) {
my ($message) = @_;
$message =~ s/:D\b//g;
return $message;
}
sub test() {
assert_equals("", no_smilies(":D"));
...
}
然后你可以尝试使用反复试验。
答案 2 :(得分:1)
你可以为初学者尝试这样的事情:
s/[:;]-?[D)]//
在您发现新的和有趣的表情符号时,将字符添加到[]
类中。