Regular Expression, 正则表达式, ⼀种使⽤表达式的⽅式对字符串 进⾏匹配的语法规则. 我们抓取到的⽹⻚源代码本质上就是⼀个超⻓的字符串, 想从⾥⾯提 取内容.⽤正则再合适不过了. 正则的优点: 速度快, 效率⾼, 准确性⾼ 正则的缺点: 新⼿上⼿难度有 点⼉⾼. 不过只要掌握了正则编写的逻辑关系, 写出⼀个提取⻚⾯内容的正则 其实并不复杂 正则的语法: 使⽤元字符进⾏排列组合⽤来匹配字符串 在线测试正 则表达式https://tool.oschina.net/regex/
常用元字符:具有固定含义的特殊符号
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| \w 匹配字母数字下划线 \d 匹配数字 \s 匹配空白符 \t 匹配一个制表符
^ 匹配字符串的开始 $ 匹配字符串的结尾
\W 匹配非字母数字下划线 \D 匹配数字 \S 匹配空白符
a|b 匹配字符a或者b () 匹配括号内的表达式,也表示一个组 [...] 匹配字符串中的字符 [^...] 匹配除了字符组中字符的所有字符
|
量词:控制前面元字符出现的次数
1 2 3 4 5 6
| * 重复零次或者更多次 + 重复一次或者多次 ? 重复零次或者一次 {n} 重复n次 {n,} 重复n次或者更多次 {n,m} 重复n到m次
|
贪婪匹配和惰性匹配
1 2
| .* 贪婪匹配(尽可能多的匹配内容) .*? 惰性匹配(尽可能少的匹配内容)
|
案例
1 2 3 4 5 6 7 8
| 案例 1 <div class="jay">周杰伦</div><div class="jj">林俊杰</div> 测试表达式 <div class=".*?">.*?</div> 测试结果 两处匹配 <div class="jay">周杰伦</div> <div class="jj">林俊杰</div>
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| 案例 2 str: 玩⼉吃鸡游戏, 晚上⼀起上游戏, ⼲嘛呢? 打游戏啊 reg: 玩⼉.*?游戏 此时匹配的是: 玩⼉吃鸡游戏 reg: 玩⼉.*游戏 此时匹配的是: 玩⼉吃鸡游戏, 晚上⼀起上游戏, ⼲嘛呢? 打游戏 str: <div>胡辣汤</div> reg: <.*> 结果: <div>胡辣汤</div> str: <div>胡辣汤</div> reg: <.*?> 结果: <div> </div> str: <div>胡辣汤</div><span>饭团</span> reg: <div>.*?</div> 结果: <div>胡辣汤</div>
|