2012-05-03 26 views
2

文字列から特定の絵文字を削除しようとしていますが、特殊文字や文字からなる絵文字をどのようにマッチさせるかはわかりません(例:Dまたは:-D ":-)"のように)。私はPerlの正規表現と一致する絵文字

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

およびその他のいくつかのバリエーションを試してみましたが、何も動作していないようにみえます。どこが間違っていますか?

EDIT:私は実際には馬鹿だったし、このコマンドの前にすべての文字を小文字にしたので、すべての絵文字がすでに「:d」に変更されていました。手伝ってくれてありがとう。

+1

私のための正規表現に動作すること。 Data :: Dumperモジュールを使用して、入力とコードを確認してください。例えば。 'print Dumper $ message'です。厳格と警告をオンにします。 – TLP

+0

テスト用のモジュールを作成し、CPANにアップロードします。人々はそれを使用し、バグを発見し、テストを書き、モジュールはますます時間とともに有用になるでしょう。 –

答えて

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")); 
    ... 
} 

その後、試行錯誤を使用して残りの部分を行うことができます。

1

あなたは初心者のために、このような何かを試みることができる:あなたが新しいと面白い顔文字を発見するよう

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

[]クラスに文字を追加します。

+0

'{1}'は何のために良いのですか? – daxim

+0

これは、そのクラスに文字が1つしかないことを確認します。私はそれが不可欠ではないと思うが、いくつかの誤認を避けるかもしれない。 – alan

+0

'{1}'は重複していませんか?正確に1つの一致が必要です。これは、量修飾子がない場合のデフォルトです。何か不足していますか? –

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!
関連する問題