如何使用Perl正则表达式从一行中提取多个电子邮件地址?

Joh*_*ohn 1 email perl text file extract

我有一个文本文件,它最初是数据库表的mysql转储.如何编写Perl脚本以从此文本文件中提取所有电子邮件地址?

我遇到的问题是我逐一阅读文档的行,然后做一个正则表达式,但是如果在同一行上有多个电子邮件地址,我的脚本似乎失败了.

open (FP, '<my-large-file.txt');
  while($line = <FP>)
  {
      #if($line =~ /\s([\S]{1,80}[@]{1}[\S]{2,100})\s/)
      #if($line =~ /([\S]{1,80}[@]{1}[\S]{2,100})\s/)
      #if($line =~ /([\S]{1,80}[@]{1}[\S]{2,100})[,]/)
      {
          push(@emails, $1);
      }
  }
close (FP);
Run Code Online (Sandbox Code Playgroud)

我一直在玩上面的代码,但没有得到预期的结果.

mob*_*mob 6

使用/g修饰符多次匹配正则表达式:

open (FP, '<my-large-file.txt');
while($line = <FP>)
{
  my @matches = /(\S{1,80}@\S{2,100})\s/g;
  push @emails, @matches;
}
close (FP);
Run Code Online (Sandbox Code Playgroud)