Perl正则表达式与新线分开

时间:2009-03-23 19:32:48

标签: regex perl split

我是Perl的新手,正在为一所学校的项目工作而且陷入困境。

输入:包含由空格,制表符“,”,“;”分隔的电子邮件地址的给定文本文件或“:”[可以分开排列]。

我正在尝试阅读电子邮件地址并将它们放入数组中。我能够在一行解析数据但是如果有换行符或返回我只得到最后一个元素。

有人可以帮我弄清楚如何在一个单独的行中列出每个地址的列表并解析它们吗?我已经阅读了一些正则表达式但需要更多练习。感谢。

open(EmailAddresses, "EmailAdressesCommaList.txt") || die "Can not open file $!";

# 
while (<EmailAddresses>)
{
    chomp;
    # Split the line into words
    @lines = split /[ ,;:\t\r\n(\t\r\n\s)+?]/;
}

foreach $value (@lines)
{
    print $value . "\n";
}

3 个答案:

答案 0 :(得分:7)

open(EmailAddresses, "EmailAdressesCommaList.txt") || die "Can not open file $!";
while(<EmailAddresses>) {
    chomp;
    push @lines, split /[ ,;:\t\r\n(\t\r\n\s)+?]/;
}
foreach $value (@lines) {
    print $value . "\n";
}

即。问题不在于你的正则表达式,而是每次循环都会覆盖@lines。

答案 1 :(得分:1)

正如混沌指出的那样,你应该推到阵列上,而不是覆盖它,但你的正则表达式也很奇怪。看来你想做:

/[ ,;:\t\r\n][\t\r\n\s]+/

但是,我认为这也会有效:

/[,;:\s]+/

答案 2 :(得分:1)

混乱是正确的。如果要打开文本文件并在同一程序中再次处理它,请记得清除该数组。

@lines = ();