Regex Perl正则表达式拆分为新行
我是Perl新手,正在为学校做一个项目,我被卡住了 输入:一个给定的文本文件,包含由空格、制表符、“、”;“或“:”[可以在单独的行上]分隔的电子邮件地址 我正在尝试读取电子邮件地址并将其放入数组中。我能够在一行上解析数据,但是如果有换行符或返回,我只能得到最后一个元素 有人能帮我弄清楚如何在一行中列出每个地址并解析它们吗?我读了一些关于正则表达式的书,但需要更多的练习。谢谢Regex Perl正则表达式拆分为新行,regex,perl,split,Regex,Perl,Split,我是Perl新手,正在为学校做一个项目,我被卡住了 输入:一个给定的文本文件,包含由空格、制表符、“、”;“或“:”[可以在单独的行上]分隔的电子邮件地址 我正在尝试读取电子邮件地址并将其放入数组中。我能够在一行上解析数据,但是如果有换行符或返回,我只能得到最后一个元素 有人能帮我弄清楚如何在一行中列出每个地址并解析它们吗?我读了一些关于正则表达式的书,但需要更多的练习。谢谢 open(EmailAddresses, "EmailAdressesCommaList.txt") || die "C
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";
}
open(EmailAddresses,“emailadresscommalist.txt”)| | die“无法打开文件$!”;
#
而()
{
咀嚼;
#把这行分成几个字
@lines=split/[,;:\t\r\n(\t\r\n\s)+?]/;
}
foreach$值(@行)
{
打印$value。“\n”;
}
open(emailaddress,“emailadresscommalist.txt”)| | die“无法打开文件$!”;
while(){
咀嚼;
推送@lines,split/[,;:\t\r\n(\t\r\n\s)+?]/;
}
foreach$值(@行){
打印$value。“\n”;
}
i、 e.问题不在于你的正则表达式,而是你每次都在循环中覆盖@行。正如混沌所指出的,你应该推进数组,而不是覆盖它,但是你的正则表达式也很奇怪。似乎你想做:
/[ ,;:\t\r\n][\t\r\n\s]+/
但是,我认为这也会起作用:
/[,;:\s]+/
混乱是正确的。如果要打开文本文件并在同一程序中再次处理,请记住清除数组
@lines = ();
是的,这不是最健康的正则表达式。我习惯在我想要的范围内声明变量。在这里,我会在while循环之前加上“my@lines;”。我认为丢失的声明将被“使用严格;使用警告;”捕获。
@lines = ();