请问一个正则表达式,连续5个整数,每个整数取值0-65535,整数间逗号隔开

请教一个正则表达式,连续5个整数,每个整数取值0-65535,整数间逗号隔开
请教一个正则表达式,连续5个整数,每个整数取值0-65535,整数间逗号隔开,
如0,1,65535,2,65534

下面的情况时不满足表达式要求的
少位数:0,1,65535,2,
多位数:0,1,65535,2,0,1
溢出范围:0,1,6523535,2,0,1


我这么写不行:[0-65535],[0-65535],[0-65535],[0-65535],[0-65535]

请大家赐教,谢谢。

------解决方案--------------------
用正则表达式表示数值范围很不方便,建议你先用正则表达式匹配5个整数,再检查匹配的结果。


------解决方案--------------------
\b[0-6]?[0-5]?[0-5]?[0-3]?[0-5]\b
------解决方案--------------------
用python不是很简单就搞定了,如果数据量不大不考虑性能的话
------解决方案--------------------
探讨
\b[0-6]?[0-5]?[0-5]?[0-3]?[0-5]\b

------解决方案--------------------
0-9 \d
10-99 [1-9]\d
100-999 [1-9]\d{2}
1000-9999 [1-9]\d{3}
10000-59999 [1-5]\d{4}

0-59999范围的正则合并一下就是[0-5]?\d?\d?\d?\d

60000-64999 6[0-4]\d{3}
65000-65499 65[0-4]\d{2}
65500-65529 655[0-2]\d
65530-65535 6553[0-5]

0-65535范围的正则为6[0-4]\d{3}|65[0-4]\d{2}|655[0-2]\d|6553[0-5]|[0-5]?\d?\d?\d?\d

针对多位数的情况0,1,65535,2,0,1需要在正则两头加上锚点(?<!,)和(?!,)

Perl code
#!/usr/bin/perl
my $num_range_re = qr#\b(?:6[0-4]\d{3}|65[0-4]\d{2}|655[0-2]\d|6553[0-5]|[0-5]?\d?\d?\d?\d)\b#;
my $all_re = qr#\b(?<!,)(?:(?:$num_range_re\,){4}(?:$num_range_re))(?!,)\b#;
while (<DATA>)
{
    chomp;
    if (/($all_re)/)
    {
        print $1;
        print "\n";
    }
    else
    {
        print "$_ is invalid num\n";
    }
}
 
__DATA__
0,1,65535,2,
0,1,65535,2,0,1
0,1,6523535,2,0,1
0,0,0,0,0
65535,65535,65535,65535,65535