用于模式的Perl搜索字符串:* @ enron.com

时间:2012-10-10 21:07:54

标签: regex perl email

我正在搜索字符串,查找以@ enron.com结尾的所有有效电子邮件地址。

我的作业如下:

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

这不是任何作业,所以我想知道我在这里做错了什么。

4 个答案:

答案 0 :(得分:2)

您正在针对正则表达式检查未初始化的变量。这可能不是你想要的。

如果您在$address中有电子邮件地址,则可以执行以下操作:

my $address = 'example@enron.com';
if ($address =~ /^(.+)\@enron\.com$/) {
  my $to = $1;
}

答案 1 :(得分:2)

它不是一项任务,它将未初始化的变量与正则表达式进行比较。没有更多的上下文,很难修复你的代码,但首先,把它放在脚本的顶部:

use strict;
use warnings;

在您从现在开始编写的每个新脚本中执行此操作。

然后可能像

my $text = <>;
my $addr = $text if $text =~ /\@enron\.com$/;

答案 2 :(得分:2)

您是在查找字符串中的所有有效地址,还是检查完整字符串是否为有效地址?我不明白你的意思是“这不是任何作业”因为你所写的都是正则表达式模式匹配

首先,你的模式中有两个@个符号,这显然是错误的

很大程度上取决于您认为有效的电子邮件地址,但一开始这将检查$enronAddress的内容是否为有效地址

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

这将打印$enronAddress

中显示的所有有效地址
print "$_\n" for $enronAddress =~ /[^@\s]+\@enron\.com/gi;

答案 3 :(得分: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";