请问一个正则表达式,连续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不是很简单就搞定了,如果数据量不大不考虑性能的话
------解决方案--------------------
------解决方案--------------------
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需要在正则两头加上锚点(?<!,)和(?!,)
请教一个正则表达式,连续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不是很简单就搞定了,如果数据量不大不考虑性能的话
------解决方案--------------------
------解决方案--------------------
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