regex - Perl 正则表达式 获取电子邮件地址

标签 regex perl parsing logging exim

在 exim 日志中为这些行编写正则表达式时遇到了一些问题

 1. 2011-05-12 11:30:26 1QKRHt-0001aD-Vd => mail <<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="abc6cac2c7ebc6cac2c785ced3cac6dbc7ce85c8c4c6" rel="noreferrer noopener nofollow">[email protected]</a>> F=<<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="0c7e6363784c69746d617c6069226f6361" rel="noreferrer noopener nofollow">[email protected]</a>> bla bla 
 2. 2011-04-22 12:01:31 1QDCF0-0002ss-Nw => /var/mail/mail <<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="ef9d80809baf828e8683c1828a8e839c9b9d8082c1809d88c19a8e" rel="noreferrer noopener nofollow">[email protected]</a>> F=<<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="01736e6e75416479606c716d642f626e6c" rel="noreferrer noopener nofollow">[email protected]</a>> bla bla 
 3. 2011-05-12 11:29:01 1QKRGU-0001a5-Ok => <a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="0d606c64614d606c64612368756c607d6168236e6260" rel="noreferrer noopener nofollow">[email protected]</a> F=<<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="04766b6b7044617c65697468612a676b69" rel="noreferrer noopener nofollow">[email protected]</a>> bla bla

我想把这个变量 [email protected] 在一个正则表达式中。我尝试使用以下逻辑:找到“F=”之前的最后一个字符串,以空格分隔,并且可以锁定在< >

你能帮我写一下这个逻辑吗?

最佳答案

您可以使用以下正则表达式:

# the line should be in variable $line
if ($line =~ /.*?\s+<?(\S+?)>?\s+F=/) {
  # ...
}

然后最好用 Mail-RFC822-Address 验证您的匹配。 perl 模块,因此完整代码可能是:

use Mail::RFC822::Address qw(valid);

# the line should be in variable $line
if ($line =~ /.*?\s+<?(\S+?)>?\s+F=/) {
  if (valid($1)) {
    # ...
  }
}

关于regex - Perl 正则表达式 获取电子邮件地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5988294/

相关文章:

perl - Perl 包实例可以维护不同的变量值吗?

macos - OSX 10.9 Mavericks 上的 Perl DBI/DBD 问题

parsing - 现代编程语言的语法是上下文无关的还是上下文敏感的?

java - 使用 JSoup 解析音频 Src

java - 正则表达式: match everything up to an optional capture group

ios - 使用正则表达式或其他机制在 NSAttributedString(或 NSString)中查找标签

javascript - 正则表达式中的运算顺序(解决挑战)

SQL正则表达式

regex - 如何使用perl的正则表达式匹配汉字

java - java 文本文件解析器工作不正确