2014-09-03 102 views
0

我有一个Perl脚本,搜索可以在电子邮件服务器上为我创建用户帐户。现在我们有一些我们想要从这台服务器上删除的旧邮箱用户。该脚本需要搜索以“old****@example.com”开头的所有帐户并删除这些帐户。 我们声明:Perl追加正则表达式到搜索字符串模式

my $accountNamePrefix='old'; 

,然后这应该列出开始以字符串“老”的帐户,但追加然后从[A-Z]字符来完成帐户删除搜索。该帐户被命名为例如:

[email protected] 
[email protected] 
[email protected], etc... 

我需要搜索的字符串前缀“老”,并列出这些帐户删除。我该如何做到这一点,例如

my $account="$accountNamePrefix/[a-z]+/\@$Domain"; 

将正则表达式搜索附加到被欺骗的前缀。

谢谢。 Rudolf

回答

0

一切都不清楚,所以让我们做一些假设。首先,你有一个电子邮件列表。我认为这个名单是可以作为描述一个Perl数组:

my @email_list = ('[email protected]', '[email protected]', '[email protected]', '[email protected]'); 

接下来,你的输入设置前缀和域名:

my $accountNamePrefix = 'old'; 
my $domain = 'bar.com'; 

现在,我们需要建立的正则表达式是仅匹配旧地址:

/<old><anychars>@<domain>/ 

如果您不熟悉正则表达式。知道,你可以简单地通过他们的变量名替换预定义设置:

/$accountNamePrefix<anychars>@$domain/ 

而且图案可以写\w+。所以,我们有:

/$accountNamePrefix\[email protected]$domain/ 

最后,如果我们把它们放在一起:

my @email_list = ('[email protected]', '[email protected]', '[email protected]', '[email protected]'); 
my $accountNamePrefix = 'old'; 
my $domain = 'bar.com'; 

print join "\n", grep(/$accountNamePrefix\[email protected]$domain/, @email_list); 

,输出是:

[email protected] 
[email protected] 
+0

你或许应该quotemeta域。 – TLP 2014-09-03 12:34:39

+0

我没有按照假设列出阵列中的电子邮件。这些电子邮件地址是从imap电子邮件服务器中提取的。这些电子邮件地址都是从'old ... @ example.com'开始的,因为它们已被重命名。正则表达式应该被用于$ accountNamePrefix以列出从旧开始删除的电子邮件。 – 2014-09-03 13:04:35

+0

在哪里声明你的'$ accountNamePrefix'变量?在哪个脚本? – nowox 2014-09-03 13:14:43

0

您可以编写一个正则表达式如下

my $re = qr/$prefix.*\@$domain/; 

或直接在比赛中这么做

my $email =~ /$prefix.*\@$domain/; 

有一些需要注意这一点,假设$prefix$domain$email被消毒

相关问题