[转载]正则表达式 的greedy、reluctant和possessive量词

reedy、reluctant和possessive量词的区别

    greedy、reluctant和possessive量词之间有微妙的区别。

greedy量词被看作“贪婪的”,因为它们在试图搜索第一个匹配之前读完(或者说吃掉)整个输入字符串。如果第一个匹配尝试(整个输入字符串)失败,匹配器就会在输入字符串中后退一个字符并且再次尝试,重复这个过程,直到找到匹配或者没有更多剩下的字符可以后退为止。根据表达式中使用的量词,它最后试图匹配的内容是1个或者0个字符。

但是,reluctant量词采取相反的方式:它们从输入字符串的开头开始,然后逐步地一次读取一个字符搜索匹配。它们最后试图匹配的内容是整个输入字符串。

最后,possessive量词总是读完整个输入字符串,尝试一次(而且只有一次)匹配。和greedy量词不同,possessive从不后退,即使这样做能允许整体匹配成功。

为了演示,我们举个工作上的例子,当我们去爬虫网页的时候需要拿到所有tr标签的内容如

<tr>1</tr><tr>2</tr><tr>3</tr>

greedy的正则表达式<tr>.*<tr> 结果总是返回“<tr>1</tr><tr>2</tr><tr>3</tr>

Reluctant的正则表达式<tr>.*?<tr> 结果会优先匹配一段小段的匹配,返回值“<tr>1</tr>”    和  ”<tr>2</tr>“ 以及  “<tr>3</tr>”


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值