我有一个perl脚本,搜索可以在电子邮件服务器上为我创建用户帐户。现在,我们要从此服务器中删除许多旧邮箱用户。该脚本需要搜索以“old****@example.com”开头的所有帐户并删除这些帐户。 我们宣布:
my $accountNamePrefix='old';
然后应该列出以字符串'old'开头的帐户,但是附加[a-z]中的字符以完成对要删除的帐户的搜索。这些帐户的名称为:
oldajones@example.com
oldbsmith@example.com
oldcvanwyk@example.com, etc...
我需要搜索前缀字符串'old'并列出这些帐户以进行删除。我怎么能这样做,即
my $account="$accountNamePrefix/[a-z]+/\@$Domain";
将正则表达式搜索附加到decelared前缀。
谢谢。 鲁道夫
答案 0 :(得分:0)
一切都不清楚,所以让我们做一些假设。首先,您有一个电子邮件列表。我假设这个列表是一个Perl数组,可以描述为:
my @email_list = ('foo@bar.com', 'oldbar@bar.com', 'oldfoo@bar.com', 'bar@bar.com');
接下来,您的输入设置是前缀和您的域名:
my $accountNamePrefix = 'old';
my $domain = 'bar.com';
现在,我们需要构建仅匹配旧地址的正则表达式:
/<old><anychars>@<domain>/
如果您不熟悉正则表达式。知道您可以简单地用变量名替换预定义的设置:
/$accountNamePrefix<anychars>@$domain/
该模式可以写成\w+
。所以我们得到了:
/$accountNamePrefix\w+@$domain/
最终如果我们把所有人放在一起:
my @email_list = ('foo@bar.com', 'oldbar@bar.com', 'oldbar@bar.com', 'bar@bar.com');
my $accountNamePrefix = 'old';
my $domain = 'bar.com';
print join "\n", grep(/$accountNamePrefix\w+@$domain/, @email_list);
输出是:
oldbar@bar.com
oldfoo@bar.com
答案 1 :(得分:0)
您可以按如下方式编写正则表达式
my $re = qr/$prefix.*\@$domain/;
或直接在比赛中
my $email =~ /$prefix.*\@$domain/;
对此有一些警告,它假定$prefix
,$domain
和$email
已消毒