Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex Perl正则表达式拆分为新行_Regex_Perl_Split - Fatal编程技术网

Regex Perl正则表达式拆分为新行

Regex Perl正则表达式拆分为新行,regex,perl,split,Regex,Perl,Split,我是Perl新手,正在为学校做一个项目,我被卡住了 输入:一个给定的文本文件,包含由空格、制表符、“、”;“或“:”[可以在单独的行上]分隔的电子邮件地址 我正在尝试读取电子邮件地址并将其放入数组中。我能够在一行上解析数据,但是如果有换行符或返回,我只能得到最后一个元素 有人能帮我弄清楚如何在一行中列出每个地址并解析它们吗?我读了一些关于正则表达式的书,但需要更多的练习。谢谢 open(EmailAddresses, "EmailAdressesCommaList.txt") || die "C

我是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";
}
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 = ();