Regex 在Perl中,如何从日志文件中的行提取电子邮件地址?
我想修剪一个字符串,它将通过逐行读取文件创建。然而,我只想从字符串中取出电子邮件,但每次都会更改。唯一的内容是域,例如Regex 在Perl中,如何从日志文件中的行提取电子邮件地址?,regex,perl,Regex,Perl,我想修剪一个字符串,它将通过逐行读取文件创建。然而,我只想从字符串中取出电子邮件,但每次都会更改。唯一的内容是域,例如@domain.com 所以对于 00:00:50,004 ERROR [SynchronousCallback] Cannot process resource: test.test@domain.com Channel: channel16 哪个正则表达式将查找@domain.com,并拉出所有测试。test@domain.com。我有一个正则表达式,它将查找字符串m/
@domain.com
所以对于
00:00:50,004 ERROR [SynchronousCallback] Cannot process resource: test.test@domain.com Channel: channel16
哪个正则表达式将查找@domain.com
,并拉出所有测试。test@domain.com
。我有一个正则表达式,它将查找字符串m/@domain.com/i
,但我不知道在整个字符串中找到@domain.com
后如何操作字符串
我想要的输出只是电子邮件
测试。test@domain.com
电子邮件地址前是否总是有空格?如果是这样,您可以使用以下内容:
m/\s([^\s\@]+\@domain.com)/i
然后,您可以通过查看$1
来检索整个电子邮件地址。如果您需要regexp的所有结果(每行多封电子邮件),您可以执行以下操作:
while ($str =~ s# ([^ ]+\@domain.com)##i){
my $email = $1;
print $email."\n";
}
问候,#/usr/bin/env perl
#!/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
严格使用;使用警告;
使用电子邮件::地址;
while(我的$line=){
我的($addr)=电子邮件::地址->解析($line);
打印$addr->address,“\n”;
}
__资料__
00:00:50004错误[SynchronousCallback]无法处理资源:测试。test@domain.com频道:16频道
输出:
C:\temp> tt
test.test@domain.com
C:\temp>tt
测试。test@domain.com看起来您只需要使用
/\S+\@domain\.com/
捕获域字符串前面的所有非空白字符。这个程序显示了原理
my$s='00:00:50004错误[SynchronousCallback]无法处理资源:测试。test@domain.com信道:信道16’;
为$s=~/\s+\@domain\.com/gi打印“$\un”;
输出
测试。test@domain.com
/(.*domain.com)/i
将是最简单的版本,将(希望)整个电子邮件地址捕获为1美元。非常感谢您的回复。这是一个很好的解决方案,但是在这种情况下,每行只有一封电子邮件。这将无法正常工作,因为它会将数组@domain
插入正则表达式中。它要么失败,要么产生错误的结果。