正则表达式基本语法
普通正则表达式
懒人正则表达式
简单正则表达式示例
实战正则表达式

1、正则表达式基本语法
1)^ 放在第一位是匹配输入字行首。和其他表达式使用时意思是反义。
2)* 匹配前面的子表达式任意次。例如,zo*能匹配“z”,也能匹配“zo”以及“zoo”。*等价于{0,}。
3)+ 匹配前面的子表达式一次或多次(大于等于1次)。+等价于{1,}。
4)? 匹配前面的子表达式零次或一次。 ?等价于{0,1}。
5)| 这里的“|”为或者的意思。将两个匹配条件进行逻辑“或”(or)运算。例如:[x|y]。
6). 匹配除“\n”和“\r”之外的任何单个字符。要匹配包括“\n”和“\r"在内的任何字符。
7)[a-z] 匹配除小写字母a-z中的任意一个小写字母。
8)[A-Z] 匹配除大小字母A-Z中的任意一个大写字母。
9)\S 匹配任何可见字符。等价于[^ \f\n\r\t\v]。
10)\s 匹配任何不可见字符,包括空格、制表符、换页符等等。等价于[ \f\n\r\t\v]。
11)\w 匹配包括下划线的任何单词字符。类似但不等价于“[A-Za-z0-9_]” 。
12)\W 匹配任何非单词字符。等价于“[^A-Za-z0-9_]”。
13){n,m} m和n均为非负整数,其中n<=m。最少匹配n次且最多匹配m次。
14)\d 匹配数字等价于[0-9]。

2、普通正则表达式
1)\w+ 匹配连续的数字字母下划线比如”、asdA12_s2D郝单莼” 会匹配到: asdA12_s2A。
2)[a-z]+ 匹配连续的小写字母比如”、asdA12_s2D郝单莼” 会匹配到: asd。
3)[A-Z]+ 匹配连续的大写字母比如”、asdA12_s2D郝单莼” 会匹配到: A和D。
4)[0-9]+ 匹配连续的数字比如”、asdA12_s2D郝单莼” 会匹配到: 12和2。
5)[a-zA-Z0-9]+ 匹配连续的数字字母比如”、asdA12_s2D郝单莼” 会匹配到: asdA12和s2A。
6)[1|s]2 匹配以1或以s开头2结尾的字符如”、asdA12_s2D郝单莼” 会匹配到: 12和s2。
7)[a-Za-z]{1,2} 匹配大小写字母最大长度为2最小长度为1。如”、asdA12_s2D郝单莼” 会匹配到: as、dA、s、D。

3、懒人正则表达式
3.1、含义
1)懒人(贪婪)表达是就是在符合匹配条件下尽可能匹配到更多数据。这个在做爬虫爬取网页数据时使用量较大!
3.2、常用表达
1).+ 匹配一行字符。
2).*? 表示匹配任意字符到下一个符合条件的字符。
3)[\s\S]*? 匹配所以字符。

4、简单正则表达式示例
1)匹配中国手机号 1[3|4|5|6|7|8|9]\d{9}
2)匹配网址 (https|http)://[a-zA-Z0-9.-/]+
3)匹配邮箱 \w+@[A-Za-z0-9]+.[A-Za-z]{2,}
4)匹配身份证号 [1-9][0-9,X]{14,17}

5、实战正则表达式

5.1、实战1:某分享网文章列表匹配

5.1.1、匹配文章列表+文章链接

技术分享-正则表达式_数据

5.1.2、匹配文本

技术分享-正则表达式_数据_02

5.1.3、匹配前分析

1)由于网页有很多无关的链接和标题先寻找出你要匹配的数据特征规则。

2)其次要想到更远!比如标题可能存在特殊符号等情况最大程度杜绝匹配失败的情况。在这里我们就用到了无敌的懒人表达式!

3)首先提取到要匹配数据的关键特征部分如下:

技术分享-正则表达式_正则_03

4)首先是h3开头。其次是a标签。然后到title。如此得出以下正则文本。

5)h3>< a\a\shref="..([\S\s]?)" title="([\S\s]?)"。

6)其中的\s为匹配空格。\为转义符,因为“.”在正则中是关键字。

5.1.4、匹配结果

技术分享-正则表达式_正则_04

5.2、实战2:某小说网小说等信息匹配

5.2.1、匹配小说标题+内容+下一章网址

技术分享-正则表达式_数据_05

技术分享-正则表达式_正则_06

5.2.2、匹配文本

技术分享-正则表达式_正则_07

5.2.3、匹配前分析

5.2.3.1、小说标题匹配思路:

1)网页的title

技术分享-正则表达式_数据_08

2)文章导航

技术分享-正则表达式_数据_09

 

 

3)文章标题

技术分享-正则表达式_正则表达式_10

 

 

5.2.3.2、小说内容匹配思路:

1)直接匹配showtxt DIV内容即可

技术分享-正则表达式_正则_11

 

 

5.2.3.3、下一章匹配思路:

技术分享-正则表达式_数据_12

 

 

5.2.3.4、如此得出以下正则文本:

1)title>\s([\S\s]?)[\s\S]?showtxt">([\s\S]?)https[\s\S]?返回目录[\s\S]?href="([\s\S]?)"。

2)其中的\s为匹配空格。这里后面匹配https是因为这样可以把他的广告词去掉。

5.2.4、匹配结果

技术分享-正则表达式_数据_13

 

 至此教程结束 !

独乐乐不如众乐乐!