首先,祝大家光棍节快乐!
没想到我会持续的更新正则的用法,在文章的末尾,会普及一个正则表达式工具。
一.先说几句。
文章的抓取算是比较常见的,经常会有需求去抓别人的网站,来提取新闻,或者其他等信息。
这两天我做一个项目就是这样,可能会抓取很多网站,但是不论什么网站,正则合适就可以了,不是吗?
二.常用句子的解释以及科普
1.抓标签碰到格式不一的句子怎么办?
例子:
<a class="link row" target="_blank" ..... href="/post/quanqiushichanggailanguzhizhishulingzhangposiliaozhishulingdie" .... > ....</a>
要求:抓住href(/post/quanqiushichanggailanguzhizhishulingzhangposiliaozhishulingdie)
正则:
<a[\S\s]*?href="(?<url>[\S\s]*?)"[\S\s]*?>[\S\s]*?</a>
运行的结果不用质疑,已经是抓到了。 但是这个句子中有两个奇怪的语法:
- [\S\s]*?
- (?<url>[\S\s]*?)
第一句,可以这么理解, 忽略中间任何字符,直道后面能够匹配为止。
第二句,就是一个正则的group,格式是:(?<名字>语句)
第二句就不用说了,直接说第一句吧 [\S\s]*?
\S | 匹配任意一个不是空白符的字符 |
\s | 匹配任意空白符的字符 |
* | 重复0次或多次 |
当他们连用起来就是可以匹配任意1个字符
当开启贪婪模式,也就是*,的时候,代表可以无限匹配。
那么,匹配总要有个结点吧?所以用?来结束
*?的意思就是匹配最短,用最少的匹配。 比如 :a.*?b匹配最短的,以a开始,以b结束的字符串。如果把它应用于aabab的话,它会匹配aab(第一到第三个字符)和ab(第四到第五个字符)
所以这个句子的情景是:
A:<a asdfsd></a>
B:<a></a>
两者都可匹配到,如果想单单匹配第一句的话,那么使用语句:<a[\S\s]+?></a>
+ | 重复一次或多次 |
区别就在+这里,*是可重复0次,?是必须重复1次
证据:
OK,第一点先到这里,以后会持续更新的。
三.再说几句
上面我第一个工具是:正则测试工具
其他工具是:
正则表达式,终极使用!3个工具,搞定一切