2

単一の正規表現行 (これはアプリケーションの構成ファイルに含まれます) を使用して、電子メール アドレスのローカル部分を取得する必要があります。

数字だけで構成されている場合は、変更せずに渡します。数字以外の文字が含まれている場合は、最大 11 文字に切り捨てます。

テスト用にこの簡単なプログラムを作成しましたが、localpart が 11 文字を超える場合は一致しません (電子メール アドレス全体が出力されます)。

#!/usr/bin/env perl

my @emails = ('the-chuck.t1.norrisson@chuck.com', '358451399991@chucksphon.com', 'ph33t@gmail.com', 'the-average.guyisbald@example.com', 'alongnameit@11chars.com', 'alongnameitis@13chars.com', 'a1234567890@11charnum.com');

for my $email (@emails){

    # will put $1$2 on the substituion spot
    $email =~ s/^(\d+)@.+|^([a-zA-Z0-9._%+-]{1,11})@.+/  /;

    print '===> ' . $email  . " \n\n ";

}

どこが間違っていますか?

4

1 に答える 1

2

\S*?文字数が11を超える場合など、正規表現アトムを含める必要があります...

    $email =~ s/^(\d+)@.+|^([a-zA-Z0-9._%+-]{1,11})\S*?@.+/$1$2/;

これを使用すると、正しい出力が生成されます。

[mpenning@Bucksnort ~]$ perl sample.pl
===> the-chuck.t

 ===> 358451399991

 ===> ph33t

 ===> the-average

 ===> alongnameit

 ===> alongnameit

 ===> a1234567890

 [mpenning@Bucksnort ~]$
于 2012-11-23T13:20:55.387 に答える