regex - 在 Perl 中,如何从日志文件的行中提取电子邮件地址?

标签 regex perl

我希望修剪一个字符串,该字符串将通过逐行读取文件而创建。但是我只想从字符串中提取电子邮件,但每次都会更改。唯一的内容是域,例如 @domain.com

所以对于输入字符串为

 00:00:50,004 ERROR [SynchronousCallback] Cannot process resource: test.test@domain.com  Channel: channel16

什么正则表达式会找@domain.com,把所有的test.test@domain.com都拉出来。我有一个正则表达式可以查找字符串 m/@domain.com/i 但我不知道如何在 @domain.com 被访问后操作该字符串位于整个字符串中。

我想要的输出只是电子邮件 test.test@domain.com

最佳答案

#!/usr/bin/env perl

use strict; use warnings;
use Email::Address;


while (my $line = <DATA>) {
    my ($addr) = Email::Address->parse($line);
    print $addr->address, "\n";
}

__DATA__
00:00:50,004 ERROR [SynchronousCallback] Cannot process resource: test.test@domain.com  Channel: channel16

输出:

C:\temp> tt
test.test@domain.com

关于regex - 在 Perl 中,如何从日志文件的行中提取电子邮件地址?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10109948/

相关文章:

c++ - SWIG、CPP 和 Perl

Java RegEx 后视构造

python - 正则表达式选择整行

如果分隔符存在,则 SQL 选择子字符串,否则给出完整字符串

Mysql 替换存储在数据库中的文件扩展名

perl - 如何使用 Getopt::Long 方法?

regex - 在 Perl 中,如何打印从文件中读取的行,并删除了可选的前导空格?

c++ - Clang 3.5.0 std::wregex 编译错误

regex - 在 Perl 中围绕一个外部字符进行拆分。组内的最小假设

perl - 如何使用 Perl DBI 在 Oracle 中超时 "select for update"