Perl 验证文本文件中的电子邮件地址?
我试图搜索一个文本文件并找到有效的电子邮件地址。我在做这样的事情:Perl 验证文本文件中的电子邮件地址?,perl,Perl,我试图搜索一个文本文件并找到有效的电子邮件地址。我在做这样的事情: #!/usr/bin/perl -w my $infile = 'emails.txt'; open IN, "< $infile" or die "Can't open $infile : $!"; while( <IN> ) { if ($infile =~ /^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,6}$/)
#!/usr/bin/perl -w
my $infile = 'emails.txt';
open IN, "< $infile" or die "Can't open $infile : $!";
while( <IN> )
{
if ($infile =~ /^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,6}$/)
{
print "Valid \n";
}
}
close IN;
$rfc5322 = qr{
# etc
}x;
#/usr/bin/perl-w
my$infle='emails.txt';
打开,“<$infle”或“die”无法打开$infle:$!”;
而()
{
如果($infle=~/^[A-Z0-9.\%+-]+@[A-Z0-9.-]+\[A-Z]{2,6}$/)
{
打印“有效\n”;
}
}
接近;
但是它没有任何作用,有什么帮助吗?我不知道Perl,但是您的正则表达式匹配整个字符串的开头和结尾。除非您设置多行标志和/或每个文件只有一个电子邮件地址,否则您将无法获得结果 尝试删除^(字符串开头)和$(字符串结尾)标记,看看这是否有帮助
发布数据集示例也可能会有所帮助。由于没有示例,我无法进一步帮助您。我不懂Perl,但您的正则表达式匹配整个字符串的开头和结尾。除非您设置多行标志和/或每个文件只有一个电子邮件地址,否则您将无法获得结果 尝试删除^(字符串开头)和$(字符串结尾)标记,看看这是否有帮助
发布数据集示例也可能会有所帮助。由于没有样品,我无法进一步帮助您。您不需要这样的东西吗
@lines = <IN>;
close IN;
foreach $line (@lines)
{
...
}
@lines=;
接近;
foreach$行(@行)
{
...
}
你不需要这样的东西吗
@lines = <IN>;
close IN;
foreach $line (@lines)
{
...
}
@lines=;
接近;
foreach$行(@行)
{
...
}
将电子邮件地址regexp与文件名匹配。无论如何,您不应该使用regex来验证电子邮件地址-使用email::Valid
use strict;
use Email::Valid;
my $infile = 'emails.txt';
open my $in, "< $infile" or die "Can't open $infile : $!";
while(my $line = <$in> ) {
chomp $line;
if (Email::Valid->address($line)) {
print "Valid \n";
}
}
close $in;
使用严格;
使用电子邮件::有效;
my$infle='emails.txt';
打开我的$in,“<$infle”或“无法打开$infle:$!”;
while(我的$line=){
chomp$行;
如果(电子邮件::有效->地址($line)){
打印“有效\n”;
}
}
以美元收盘;
将电子邮件地址regexp与文件名匹配。无论如何,您不应该使用regex来验证电子邮件地址-使用email::Valid
use strict;
use Email::Valid;
my $infile = 'emails.txt';
open my $in, "< $infile" or die "Can't open $infile : $!";
while(my $line = <$in> ) {
chomp $line;
if (Email::Valid->address($line)) {
print "Valid \n";
}
}
close $in;
使用严格;
使用电子邮件::有效;
my$infle='emails.txt';
打开我的$in,“<$infle”或“无法打开$infle:$!”;
while(我的$line=){
chomp$行;
如果(电子邮件::有效->地址($line)){
打印“有效\n”;
}
}
以美元收盘;
您正在尝试匹配$infle,它包含文本文件的名称,即“emails.txt”
你应该这样做
while(<IN>) {
print "Valid \n" if $_ =~ /\bYOURREGEX\b/
}
while(){
如果$\u=~/\bYOURREGEX\b,则打印“有效\n”/
}
这样\b将匹配单词边界,而不是行的开头和结尾,并且您可以匹配另一个字符串中包含的电子邮件地址
编辑:但吉拉的答案肯定更好,这一个只是告诉你出了什么问题
希望这有帮助 您正在尝试匹配$infle,它包含文本文件的名称,即“emails.txt” 你应该这样做
while(<IN>) {
print "Valid \n" if $_ =~ /\bYOURREGEX\b/
}
while(){
如果$\u=~/\bYOURREGEX\b,则打印“有效\n”/
}
这样\b将匹配单词边界,而不是行的开头和结尾,并且您可以匹配另一个字符串中包含的电子邮件地址
编辑:但吉拉的答案肯定更好,这一个只是告诉你出了什么问题
希望这有帮助 此正则表达式将出现问题,除非:
\p{Alpha}
所有字母字符替换所有只接受大写的A-Z
,而不考虑大小写。您可以将其与0-9
和\uu
组合使用。您应该将其替换为\w
(任何单词字符)
不过,这仍然不是一个有效的电子邮件正则表达式,请看——但它可能在必要时完成这项工作 此正则表达式将出现问题,除非:
\p{Alpha}
所有字母字符替换所有只接受大写的A-Z
,而不考虑大小写。您可以将其与0-9
和\uu
组合使用。您应该将其替换为\w
(任何单词字符)
不过,这仍然不是一个有效的电子邮件正则表达式,请看——但它可能在必要时完成这项工作 你知道,这里有一份。看起来是这样的:
#!/usr/bin/perl -w
my $infile = 'emails.txt';
open IN, "< $infile" or die "Can't open $infile : $!";
while( <IN> )
{
if ($infile =~ /^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,6}$/)
{
print "Valid \n";
}
}
close IN;
$rfc5322 = qr{
# etc
}x;
我在上面的#etc
省略中有一两处,你可以在另一个答案中查看
顺便说一句,如果您要在正则表达式中使用\b
,请特别小心,确保您知道它的含义
$boundary_before = qr{(?(?=\w)(?<!\w)|(?<=\w))}; # like /\bx/
$boundary_after = qr{(?(?<=\w)(?!\w)|(?=\w))}; # like /x\b/
$nonboundary_before = qr{(?(?=\w)(?<=\w)|(?<!\w))}; # like /\Bx/
$nonboundary_after = qr{(?(?<=\w)(?=\w)|(?!\w))}; # like /x\B
$boundary\u before=qr{(?=\w)(?
这很少是人们所期望的。你知道,这里有一个副本。它看起来像这样:
#!/usr/bin/perl -w
my $infile = 'emails.txt';
open IN, "< $infile" or die "Can't open $infile : $!";
while( <IN> )
{
if ($infile =~ /^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,6}$/)
{
print "Valid \n";
}
}
close IN;
$rfc5322 = qr{
# etc
}x;
我在上面的#etc
省略中有一两处,你可以在另一个答案中查看
顺便说一句,如果您要在正则表达式中使用\b
,请特别小心,确保您知道它的含义
$boundary_before = qr{(?(?=\w)(?<!\w)|(?<=\w))}; # like /\bx/
$boundary_after = qr{(?(?<=\w)(?!\w)|(?=\w))}; # like /x\b/
$nonboundary_before = qr{(?(?=\w)(?<=\w)|(?<!\w))}; # like /\Bx/
$nonboundary_after = qr{(?(?<=\w)(?=\w)|(?!\w))}; # like /x\B
$boundary\u before=qr{(?=\w)(?
这很少是人们所期望的。要详细说明为什么这是正确的答案,您需要实际验证电子邮件地址的正则表达式。要详细说明为什么这是正确的答案,您需要实际验证电子邮件地址的正则表达式。您应该阅读RFC 5322()因为您缺少有效字符显示文件中是否嵌入了电子邮件地址?每行一个完整地址?分散在其他数据中?一行上是否有多个地址?一个电子邮件地址是否可以跨多行拆分?您应该阅读RFC 5322()因为您缺少有效字符,所以显示文件中嵌入的电子邮件地址?每行一个完整地址?分散在其他地址中吗