IP正则匹配式及记录一个坑
ipv4地址的正则(python 正则)匹配为:
'((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)\.){3}(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)'
坑:
下面的一个错误的ip正则表达式是参考别的博客的,是有错误的。因为它优先匹配的一位数,其次是两位数,最后是三位数。可能会将3位数匹配成两位,如下图:
'(([1-9]?\d|1\d\d|25[0-5]|2[0-4]\d)\.){3}([1-9]?\d|1\d\d|25[0-5]|2[0-4]\d)' (错误)
错误如下:(用Python脚本统计Apache日志中出现次数前五的ip地址。第一次脚本用的正确的正则匹配式,第二次脚本用的上面的错误的正则匹配式)
提示:(2019-12-12更新)
在grep命令直接使用上面的正则表达式时,“\d”是匹配不到数字的。因为grep命令默认使用基本正则表达式( BREs),使用 grep -P 指定使用Perl正则表达式(PREs)即可。
具体参考:https://blog.csdn.net/yufenghyc/article/details/51078107 (grep中使用"\d"匹配数字不成功的原因)