我正在搜索字符串,查找以@ enron.com结尾的所有有效电子邮件地址。
我的作业如下:
my $enronAddress =~/^(.+?)@\@enron\.com/i;
这不是任何作业,所以我想知道我在这里做错了什么。
答案 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";