2012-10-10 35 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$/;