1

@enron.comで終わるすべての有効な電子メールアドレスの文字列を検索しています。

私の割り当ては次の行です:

my $enronAddress =~/^(.+?)@\@enron\.com/i;

これは割り当てを行っていないので、ここで何を間違えたのか疑問に思います。

4

4 に答える 4

2

正規表現に対して初期化されていない変数をチェックしています。これはおそらくあなたが望むものではありません。

に電子メール アドレスがある場合は、次の$addressようにします。

my $address = 'example@enron.com';
if ($address =~ /^(.+)\@enron\.com$/) {
  my $to = $1;
}
于 2012-10-10T21:17:03.467 に答える
2

これは代入ではなく、初期化されていない変数を正規表現と比較しています。これ以上コンテキストがないと、コードを修正するのは困難ですが、まず、これをスクリプトの先頭に置きます。

use strict;
use warnings;

これから作成するすべての新しいスクリプトでこれを行います。

それから多分何か

my $text = <>;
my $addr = $text if $text =~ /\@enron\.com$/;
于 2012-10-10T21:17:24.770 に答える
2

文字列内のすべての有効なアドレスを探していますか、それとも文字列全体が有効なアドレスであることを確認していますか? あなたが書いたのは正規表現パターンの一致だけなので、「これは割り当てを行っていません」という意味がわかりません

まず@、パターンに 2 つの兆候がありますが、これは明らかに間違っています。

有効なメールアドレスと見なすものに大きく依存しますが、最初に、これは内容が$enronAddress有効なアドレスであるかどうかを確認します

if ( $enronAddress =~ /^[^@\s]+\@enron\.com$/i ) { ... }

これにより、に表示されるすべての有効なアドレスが出力されます$enronAddress

print "$_\n" for $enronAddress =~ /[^@\s]+\@enron\.com/gi;
于 2012-10-10T21:19:47.383 に答える
1

最初に単純な「文字列の終わり」正規表現との一致を試みてみませんか? Perl のデバッガーを使用する場合:

DB<3> x 'foo@enron.com' =~ /\@enron\.com$/
0  1

DB<4> x 'foo@enrn.com' =~ /\@enron\.com$/
empty array

これらは、適切なパターンを見つけていることを示しています。次に、キャプチャを追加します。

DB<5> x ($user) = ('foo@enron.com' =~ /(.+)\@enron.com$/)
0  'foo'

DB<6> x $user
0  'foo'

コードでは次のようになります。

#!/usr/bin/perl

my ($user) = ('foo@enron.com' =~ /(.+)\@enron\.com$/);
print "$user\n";
于 2012-10-10T21:15:46.113 に答える