@enron.comで終わるすべての有効な電子メールアドレスの文字列を検索しています。
私の割り当ては次の行です:
my $enronAddress =~/^(.+?)@\@enron\.com/i;
これは割り当てを行っていないので、ここで何を間違えたのか疑問に思います。
正規表現に対して初期化されていない変数をチェックしています。これはおそらくあなたが望むものではありません。
に電子メール アドレスがある場合は、次の$address
ようにします。
my $address = 'example@enron.com';
if ($address =~ /^(.+)\@enron\.com$/) {
my $to = $1;
}
これは代入ではなく、初期化されていない変数を正規表現と比較しています。これ以上コンテキストがないと、コードを修正するのは困難ですが、まず、これをスクリプトの先頭に置きます。
use strict;
use warnings;
これから作成するすべての新しいスクリプトでこれを行います。
それから多分何か
my $text = <>;
my $addr = $text if $text =~ /\@enron\.com$/;
文字列内のすべての有効なアドレスを探していますか、それとも文字列全体が有効なアドレスであることを確認していますか? あなたが書いたのは正規表現パターンの一致だけなので、「これは割り当てを行っていません」という意味がわかりません
まず@
、パターンに 2 つの兆候がありますが、これは明らかに間違っています。
有効なメールアドレスと見なすものに大きく依存しますが、最初に、これは内容が$enronAddress
有効なアドレスであるかどうかを確認します
if ( $enronAddress =~ /^[^@\s]+\@enron\.com$/i ) { ... }
これにより、に表示されるすべての有効なアドレスが出力されます$enronAddress
print "$_\n" for $enronAddress =~ /[^@\s]+\@enron\.com/gi;
最初に単純な「文字列の終わり」正規表現との一致を試みてみませんか? 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";