我正在編寫一個優化,您正在爲我的應用程序執行搜索,並且如果字符串看起來像是一個IP地址,那麼請勿麻煩搜索MAC地址。如果搜索看起來像一個MAC地址,不要打擾在IP地址數據庫列。用於部分匹配IP或MAC地址的Perl正則表達式
我已經看到完全匹配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:'
可能重複的[MAC地址的正則表達式是什麼?](http://stackoverflow.com/questions/4260467/what-is-a-regular-expression-for-a-mac-address) – eggyal
不,我想要一個包含MAC地址的正則表達式,而不是'是'一個MAC地址。 –
MAC地址的另一個解決方案是用00s填充輸入。例如,您輸入11並將其填充爲11:00:00:00:00:00,然後將其通過MAC地址RegEx。對於IP甚至IPv6地址,您不能這樣做 –