扫码关注官方订阅号
re_qb = re.compile(r'detail.*?<a.*?>(.*?)<.*?title="(.*?)">\s*(.*?)\s*?<',re.DOTALL)
http://www.oschina.net/code/snippet_143473_24609 命令行看糗百里的.请详细解释一下每一部分的含义.
小伙看你根骨奇佳,潜力无限,来学PHP伐。
其实这个和python没多大关系,主要是正则表达式。
re.compile()是将字符串书写的正则表达式转换成模式对象,以便后面进行匹配。其中,r''里面的内容是字符串
'.'表示通配符,可以匹配除了换行符以外的任意一个字符,但是加上re.DOTALL之后'.'就可以匹配到换行符了。
re.DOTALL
然后逐个来解释,其中,detail, <, a, >, title="等等不是特殊字符的,直接匹配
detail
<
a
>
title="
.表示通配,允许重复0次或多次,所以.可以匹配任意多个字符,也可以匹配0个字符。?表示非贪婪模式,如果不加问号直接写成detail.*<a这样会从detail开始匹配,一直匹配到最后一个<a处,而我们想要的是从detail开始匹配到第一次出现<a为止,所以就要用非贪婪模式。这就是问号的作用。
detail.*<a
<a
<a.*?>同理,从<a开始匹配,到第一个>为止的任意字符。
<a.*?>
括号()表示子模式,此处理解为括号内就是要找出来的内容即可。
最后就是\s匹配任意的空白符,包括空格,制表符(Tab),换行符,中文全角空格等。
\s
命令行看糗百写的不是很好,分割不清楚,带有图片的应该过虑掉不显示。
最开始分析的时候可以它匹配的糗百的页面找到源码,然后用正则表达式在线测试,高亮显示匹配结果,一点一点的测试,比较容易明白。
微信扫码关注PHP中文网服务号
QQ扫码加入技术交流群
扫描下载App
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
PHP学习
技术支持
返回顶部
其实这个和python没多大关系,主要是正则表达式。
re.compile()是将字符串书写的正则表达式转换成模式对象,以便后面进行匹配。其中,r''里面的内容是字符串
'.'表示通配符,可以匹配除了换行符以外的任意一个字符,但是加上
re.DOTALL
之后'.'就可以匹配到换行符了。然后逐个来解释,其中,
detail
,<
,a
,>
,title="
等等不是特殊字符的,直接匹配.表示通配,允许重复0次或多次,所以.可以匹配任意多个字符,也可以匹配0个字符。?表示非贪婪模式,如果不加问号直接写成
detail.*<a
这样会从detail开始匹配,一直匹配到最后一个<a
处,而我们想要的是从detail开始匹配到第一次出现<a
为止,所以就要用非贪婪模式。这就是问号的作用。<a.*?>
同理,从<a
开始匹配,到第一个>
为止的任意字符。括号()表示子模式,此处理解为括号内就是要找出来的内容即可。
最后就是
\s
匹配任意的空白符,包括空格,制表符(Tab),换行符,中文全角空格等。命令行看糗百写的不是很好,分割不清楚,带有图片的应该过虑掉不显示。
最开始分析的时候可以它匹配的糗百的页面找到源码,然后用正则表达式在线测试,高亮显示匹配结果,一点一点的测试,比较容易明白。