我正在编写一个优化程序,您正在搜索我的应用程序,如果字符串看起来像一个 IP 地址,那么不要费心搜索 MAC 地址。如果搜索看起来像 MAC 地址,请不要费心查看 IP 地址 db 列。
我见过完全匹配 ips 和 mac 地址的表达式,但很难找到一个匹配部分字符串和相当有趣的脑筋急转弯的表达式,我想我会得到其他人的意见。现在我有一个没有正则表达式的解决方案。
use List::Util qw(first);
sub query_is_a_possible_mac_address {
my ($class, $possible_mac) = @_;
return 1 unless $possible_mac;
my @octets = split /:/, $possible_mac, -1;
return 0 if scalar @octets > 6; # fail long MACS
return 0 if (first { $_ !~ m/[^[:xdigit:]]$/ } @octets; # fail any non-hex characters
return not first { hex $_ > 2 ** 8 }; # fail if the number is too big
}
# valid tests
'12:34:56:78:90:12'
'88:11:'
'88:88:F0:0A:2B:BF'
'88'
':81'
':'
'12:34'
'12:34:'
'a'
''
# invalid tests
'88:88:F0:0A:2B:BF:00'
'88z'
'8888F00A2BBF00'
':81a'
'881'
' 88:1B'
'Z'
'z'
'a12:34'
' '
'::88:'