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 に答える