1、IP地址
1.1、题目
匹配合法的IP地址
192.168.1.150
0.0.0.0
255.255.255.255
17.16.52.100
172.16.0.100
400.400.999.888
001.022.003.000
257.257.255.256
 
1.2、解答
(\d{1,3}\.){3}\d{1,3}
(?:\d{1,3}\.){3}\d{1,3} # 400.400.999.888
对于ip地址验证的问题
可以把数据提出来后,交给IP地址解析库 处理,如果解析异常,就说明有问题,正则的验证只是一
个初步的筛选,把明显错误过滤掉。
可以使用复杂的正则表达式验证地址正确性
前导0是可以的
import socket
nw = socket.inet_aton('192.168.05.001') # 错了抛异常
print(nw, socket.inet_ntoa(nw))
分析:
每一段上可以写的数字有1、01、001、000、23、023、230、100,也就说1位就是0-9,2位每一位也是
0-9,3位第一位只能0-2,其余2位都可以0-9
(?:([0-2]\d{2}|\d{1,2})\.){3}([0-2]\d{2}|\d{1,2}) # 解决超出200的问题,但是256
呢?
200是特殊的,要再单独分情况处理
25[0-5]|2[0-4]\d|[01]?\d\d? 这就是每一段的逻辑
(?:(25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(25[0-5]|2[0-4]\d|[01]?\d\d?)
 
2、提取文件名
2.1、题目
选出含有ftp的链接,且文件类型是gz或者xz的文件名
ftp://ftp.astron.com/pub/file/file-5.14.tar.gz
ftp://ftp.gmplib.org/pub/gmp-5.1.2/gmp-5.1.2.tar.xz
ftp://ftp.vim.org/pub/vim/unix/vim-7.3.tar.bz2
http://anduin.linuxfromscratch.org/sources/LFS/lfs-packages/conglomeration//iana-etc/iana-etc-2.30.tar.bz2
http://anduin.linuxfromscratch.org/sources/other/udev-lfs-205-1.tar.bz2
http://download.savannah.gnu.org/releases/libpipeline/libpipeline-1.2.4.tar.gz
http://download.savannah.gnu.org/releases/man-db/man-db-2.6.5.tar.xz
http://download.savannah.gnu.org/releases/sysvinit/sysvinit-2.88dsf.tar.bz2
http://ftp.altlinux.org/pub/people/legion/kbd/kbd-1.15.5.tar.gz
http://mirror.hust.edu.cn/gnu/autoconf/autoconf-2.69.tar.xz
http://mirror.hust.edu.cn/gnu/automake/automake-1.14.tar.xz
 
2.2、解答
.*ftp.*\.(?:gz|xz)
.*ftp.*/([^/]+(?:.xz|.gz))$   # 后面的分组就是文件名
(?<=.*ftp.*/)[^/]*\.(?:gz|xz) # 断言文件名前一定还有ftp,python的re模块不支持断言中
使用*、+或{3,4}等不固定长度的匹配
 
3、匹配邮箱地址
3.1、题目
test@hot-mail.com
v-ip@magedu.com
web.manager@magedu.com.cn
super.user@google.com
a@w-a-com
 
3.2、解答
确定规则,邮箱名为字母、数字、下划线、减号、点号,域名一样
\w[\w.-]*@([\w-]+\.)+\w+
@前至少一个字符开头,可以有字母、数字、下划线、减号、点号
@后至少有一个字符后跟点,重复至少1次,最后以1个字符串结尾
 
4、匹配html标记
4.1、题目
提取href中的链接url,提取文字“test”
<a href='http://www.test.com/index.html' target='_blank'>test</a>
 
4.2、解答
有的时候可以这样写 <a href=http://www.magedu.com/index.html target='_blank'>马哥教育
</a> ,属性attr不标准的写法不写单双引号,这个一般交给浏览器可以正常处理。
href=['"]?([^'"\s]*)
提取内容时,要考虑一下情况
<a href='http://www.mtest.com/index.html' target='_blank'>test</a><a>test1</a>
<a.*?>[^<>]*
a标签要到第一个右尖括号结束,不能贪婪。内容是其之后第一个左尖括号之前
 
5、匹配URL
5.1、题目
http://www.test.com/index.html
https://login.test.com
file:///ect/sysconfig/network
 
5.2、解答
6、匹配二代中国身份证ID
6.1、题目
321105700101003
321105197001010030
11210020170101054X
17位数字+1位校验码组成
前6位地址码,8位出生年月,3位数字,1位校验位(0-9或X)
 
6.2、解答
身份证验证
身份证验证需要使用公式计算,最严格的应该实名验证。
\d{17}[0-9xX]|\d{15}