Perl正则表达式匹配表情符号

时间:2012-05-03 21:34:36

标签: regex perl

我正在尝试从字符串中删除某些表情符号,但我无法弄清楚如何匹配由特殊字符和字母组成的表情符号,例如:D或:-D(它适用于表情符号,如“: - ” )“)。我试过了

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

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

编辑:我实际上是愚蠢的,并没有意识到我在此命令之前将所有字母都设为小写,因此所有表情符号都已更改为“:d”。谢谢你的帮助。

3 个答案:

答案 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)]//

在您发现新的和有趣的表情符号时,将字符添加到[]类中。