求一条匹配合法IP地址的正则表达式(要考虑全面哦)

求一条匹配合法IP地址的正则表达式(要考虑全面哦)

如题,希望大侠们发挥一下!
use Regexp::Common qw /net/;
匹配ip地址正确的写法是 ((\b2[0-4]\d\b|\b25[0-5]\b|\b[01]?\d\d?\b)\.){3}(\b2[0-4]\d\b|\b25[0-5]\b|\b[01]?\d\d?\b
非要用正则表达式的话,就只用 \d{1,3}(\.\d{1,3}){3}
因为再往复杂里写,完全匹配0-255的范围,正则表达式会很复杂,
虽然执行效率不一定差,但可读性会大大降低。
所以还不如先用正则表达式找到之后,再写段程序来判断其合法性。
比如:

[Copy to clipboard] [ - ]
CODE:
while ($str =~ /(\d+(?:\.\d+){3})/g) {
    next if grep { $_ > 255 } split /\./, $1;
    # found...
    print "Found $1\n";
}