Perl将正则表达式附加到搜索字符串模式

时间:2014-09-03 12:22:00

标签: regex perl

我有一个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前缀。

谢谢。 鲁道夫

2 个答案:

答案 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已消毒