正则表达式的学习和实践

什么是正则表达式

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>

所以我们能发现这样一个规律:

  • .*? 表示尽可能少的匹配,得到一个数组结果。
  • .* 表示尽可能多的匹配,只得到一个结果。
  • 8
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值