2017-12-02 8 views
-1

1つまたは2つの電子メールアドレスがカンマで区切られたスカラー(表の列)があります。これらのレコードのいくつかについては、「[email protected][email protected]」や「jsmith @ wellingent.com、mjones @ wellingent.com」など、悪い/古いメールアドレスと末尾のカンマ()を削除する必要があります存在する場合)perlの正規表現にスカラーと句読点が一致する

jmsith @ wellingentが有効でなくなった場合は、どうすればそのアドレスと末尾のカンマを削除できますか?

これはアドレスを削除するだけですが、コンマは残ります。

my $general_email = '[email protected],[email protected]'; 
my $bad_addr = '[email protected]'; 

$general_email =~ s/$bad_addr//; 

ありがとうございました。

答えて

1

あなたは、正規表現のないが、リストの分割としたほうが良いことがあります

use strict; 
use warnings; 

sub remove_bad { 
    my ($full, $bad) = @_; 
    my @emails = split /\s*,\s*/, $full; # split at comma, allowing for spaces around the comma 
    my @filtered = grep { $_ ne $bad } @emails; 
    return join ",", @filtered; 
} 

print 'First: ' , remove_bad('[email protected], [email protected]', '[email protected]'), "\n"; 
print 'Last: ', remove_bad('[email protected], [email protected]', '[email protected]'), "\n"; 
print 'Middle: ', remove_bad('[email protected], [email protected], [email protected]', '[email protected]'), "\n"; 

まず、カンマでsplit悪いのメールアドレスリスト、配列を作成。 grepを使用してフィルタリングし、不良アドレスを削除します。 join残りの要素は文字列に戻ります。

上記のコードを印刷:

まず:[email protected]

最終:[email protected]

中東:私@ example.org、他の@ eample.org

+0

私は偽陽性を避けるために '!m/$ bad /'を '$ _ ne $ bad 'に置き換えますが、これは最も頑強な解決策です。 – PerlDuck

+0

@PerlDuck良い点、ありがとう!一定。 – Robert

関連する問題