私のアプリケーションの検索を実行している最適化を書いています。文字列が IP アドレスのように見える場合は、MAC アドレスを検索する必要はありません。また、検索が MAC アドレスのように見える場合は、わざわざ IP アドレスのデータベース列を調べないでください。
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:'