什么是正则表达式
Regular Expression,正则表达式,一种使用表达式的方式对字符串进行匹配的语法规则。
- 正则的优点:速度快、效率高、准确性高。
- 正则的缺点:新手上手难度有点高。
但是只要掌握了正则的编写逻辑,写出一个提取页面内容的正则其实并不复杂。
正则的语法:使用元字符进行排列组合来匹配字符串。可使用在线测试正则表达式来进行练习:https://tool.oschina.net/regex
元字符
元字符是具有固定含义的特殊符号。
常用元字符如下:
. 匹配换行符以外的任意字符
\w 匹配字母或数字或下划线
\s 匹配任意的空白符
\d 匹配数字
\n 匹配一个换行符
\t 匹配一个制表符
^ 匹配字符串的开始
$ 匹配字符串的结尾
\W 匹配非字母、数字、下划线
\D 匹配非数字
\S 匹配非空白符
a|b 匹配字符a或字符b
() 匹配括号内的表达式,也表示一个组
[...] 匹配字符串组中的字符
[^...] 匹配除了字符组中字符的所有字符
量词
量词符号,用于控制前面的元字符出现的次数。
* 重复0次或者更多次
+ 重复1次或者更多次
? 重复0次或者1次
{n} 重复n次
{n,} 重复n次或者更多次
{n,m} 重复n到m次
贪婪匹配和惰性匹配
.* 贪婪匹配。尽可能的匹配到更长的字符串
.*? 惰性匹配。尽可能的匹配到更多符合要求的字符串
在写爬虫时用的最多的就是惰性匹配。
使用案例
str: 玩儿王者荣耀游戏,晚上一起玩游戏啊。干嘛呢?打游戏啊。
reg: 玩儿.*?游戏
匹配到的结果:
玩儿王者荣耀游戏
如果 reg: 玩儿.*游戏
匹配到的结果:
玩儿王者荣耀游戏,晚上一起玩游戏啊。干嘛呢?打游戏
###################################
str: <div>胡辣汤</div>
reg: <.*?>
匹配到的结果:
<div>
</div>
如果reg: <.*>
匹配到的结果:
<div>胡辣汤</div>
###################################
str: <div>胡辣汤</div><span>饭团</span>
reg: <div>.*?</div>
匹配到的结果:
<div>胡辣汤</div>
所以我们能发现这样一个规律:
- .*? 表示尽可能少的匹配,得到一个数组结果。
- .* 表示尽可能多的匹配,只得到一个结果。