2

我正在尝试从字符串中删除某些表情符号,但我不知道如何匹配由特殊字符和字母组成的表情符号,例如 :D 或 :-D (它适用于“:-)”等表情符号) . 我试过

$message =~ s/\:D//;

和其他一些变化,但似乎没有任何效果。我哪里错了?

编辑:我实际上很愚蠢,没有意识到我在这个命令之前把所有的字母都变成了小写,所以所有的表情符号都已经变成了“:d”。感谢帮助。

4

3 回答 3

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";

输出:

你好世界!
于 2012-05-03T21:43:43.847 回答
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"));
  ...
}

然后,您可以通过反复试验来完成其余的工作。

于 2012-05-03T21:39:24.313 回答
1

对于初学者,您可以尝试这样的事情:

s/[:;]-?[D)]//

当您发现新的有趣的表情符号时,将角色添加到[]课程中。

于 2012-05-03T21:38:44.127 回答