【发布时间】:2014-05-06 16:02:34
【问题描述】:
我有一个格式如下的文本文件:
# Email File
# List of email addresses
##############################
PRIMARY_EMAIL=abc@123.com
ALTERNATE_EMAIL=123@abc.com
#PRIMARY_EMAIL=def@456.com
#ALTERNATE_EMAIL=456@def.com
PRIMARY_EMAIL=ghi@789.com
ALTERNATE_EMAIL=789@ghi.com
此文件包含员工的主要和备用电子邮件地址。我使用该文件作为我用来向员工发送通知的脚本的输入。如果员工休假,一些电子邮件地址会被注释掉,不需要包含在结果中。
我遇到的问题是,当字符串以“PRIMARY_EMAIL”或“ALTERNATE_EMAIL”开头时,我无法匹配“=”符号后的电子邮件地址。
使用以下代码,我可以获取“PRIMARY_EMAIL”,但它不会获取“ALTERNATE_EMAIL”。如果我使用两个变量获取输入并在正则表达式中特别指出“PRIMARY_EMAIL”或“ALTERNATE_EMAIL”,则下面的代码可以工作,但如果可能的话,我想在一行代码中一次获取所有内容。
while (<$in_file>) {
$line = $1 if (/^PRIMARY_EMAIL=(.*)|^ALTERNATE_EMAIL=(.*)/);
chomp;
if (defined $line) {
push (@recipient, $line);
}
}
$to = join("\n", @recipient);
print "\$to = \n", $to, "\n";
输出:
$to =
abc@123.com
ghi@789.com
如您所见,输出/正则表达式不包括“ALTERNATE_EMAIL”之后的值。
输出应该是:
$to =
abc@123.com
123@abc.com
ghi@789.com
789@ghi.com
我已经到处搜索了一种使用交替来匹配行首的两个不同字符串的方法,同时只在“=”符号之后返回药水,但我发现的每个示例/解释都只涉及字符串开头的单个匹配项。
感谢您的帮助。
【问题讨论】: