首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > perl python >

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

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

请教一个正则表达式,连续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/perlmy $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,10,1,6523535,2,0,10,0,0,0,065535,65535,65535,65535,65535 

热点排行