2012-10-10 50 views
1

我正在搜索以@ enron.com结尾的所有有效电子邮件地址的字符串。模式的Perl搜索字符串:*@enron.com

我的任务是以下行:

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

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

+0

我缩进了你的代码,使它呈现为代码,hth。那里应该有两个@字符? –

+5

您可能需要开始[这里](http://perldoc.perl.org/perlretut.html)。 – lanzz

回答

2

你在字符串中寻找所有有效地址,或检查完整的字符串是一个有效的地址?我不明白你所说的“这不进行任何分配”,因为所有你写的意思是一个正则表达式模式匹配

首先,你有你的格局,这显然是两个错误的@迹象

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

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

,这将打印出现在$enronAddress所有有效地址

print "$_\n" for $enronAddress =~ /[^@\s]+\@enron\.com/gi; 
+0

我试图从字符串中提取有效的电子邮件地址,谢谢! – b15

1

为什么不尝试匹配一个简单的“字符串结束”正则表达式呢?使用Perl的调试器:

DB<3> x '[email protected]' =~ /\@enron\.com$/ 
0 1 

DB<4> x '[email protected]' =~ /\@enron\.com$/ 
empty array 

这些显示你找到正确的模式。然后捕获添加到它:

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

DB<6> x $user 
0 'foo' 

在代码中它会看起来像:

#!/usr/bin/perl 

my ($user) = ('[email protected]' =~ /(.+)\@enron\.com$/); 
print "$user\n"; 
2

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

如果您有$address的电子邮件地址,你会做这样的事情:

my $address = '[email protected]'; 
if ($address =~ /^(.+)\@enron\.com$/) { 
    my $to = $1; 
} 
2

它不是一个任务,它是比较未初始化的变量对一个正则表达式。如果没有更多的情况下,这是很难解决您的代码,但一开始,把这个在你的脚本的顶部:

use strict; 
use warnings; 

做,在你从现在起每写新的脚本。

然后可能像

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