[英]Perl Regex to match only 1 domain
我正在尝试创建一个匹配以下内容的正则表达式:
part1@domain.com
第1部分:其中part1是0-9之间的任何5位数字
第2部分:[可选]其中@ domain.com是除@ yahoo.com之外的所有域名
例如: 12345@yahoo.com
我无法找到如何在正则表达式中插入条件。 现在只有我的正则表达式匹配数字+域。 仍需要弄清楚:
码:
#!/usr/bin/perl
use strict;
use warnings;
my $regex1 = '^(\d{5})([@]([a-zA-Z0-9_-]+?\.[a-zA-Z]{2,6})+?)';
while ( my $line = <DATA> ) {
chomp $line;
if ($line =~ /$regex1/)
{
print "MATCH FOR:\t$line \n";
}
}
样本数据:
1234
12345@
12345@tandberg
A12345@tandberg.com
12345
12345@tandberg.com
12345@cisco.com
12345@tandberg.amer.com
12345@tandberg.demo
为什么不首先检查yahoo.com,如果你得到一个匹配,请转到下一行:
while ( my $line = <DATA> ) {
chomp $line;
next if ($line =~ /yahoo\.com$/);
if ($line =~ /$regex1/)
{
print "MATCH FOR:\t$line \n";
}
}
这个怎么样?
\d{5}(?:@(?!yahoo)[a-zA-Z0-9.]+\.[a-zA-Z]{2,3})?
以扩展形式:
\d{5} # 5 digits
(?: # begin a grouping
@ # literal @ symbol
(?!yahoo\.com) # don't allow something that matches 'yahoo.com' to match here
[a-zA-Z0-9.]+ # one or more alphanumerics and periods
\. # a literal period
[a-zA-Z]{2,3} # 2-3 letters
) # end grouping
? # make the previous item (the group) optional
(?!yahoo\\.com)
被称为“ 负前瞻断言 ”。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.