javascript - 正则表达式的贪婪\非贪婪模式怎么理解?
PHPz
PHPz 2017-04-11 11:45:59
[JavaScript讨论组]

最近在学习Python相关的正则表达式,对其中的贪婪和非贪婪模式的概念有点模糊,希望借下面几个例子,能理解一下它们的区别:
例子1:

  1. 为何会出现这样的结果呢?

  2. [out]12为何还多了一个空字符出来呢?

In [12]: re.match(r'^(\d+)(0*)$', '102300').groups()
Out[12]: ('102300', '')
In [13]: >>> re.match(r'^(\d+?)(0*)$', '102300').groups()
Out[13]: ('1023', '00')

例子2:为什么加了?,得到的结果就不一样了呢?

In [7]: import re

In [8]:  r=re.findall(r'','首页 - CK的官方网站,首页 - Michael翔的官方网站')

In [9]: r
Out[9]: ['首页 - CK的官方网站', '首页 - Michael翔的官方网站']

In [10]:  r=re.findall(r'','首页 - CK的官方网站,首页 - Michael翔的官方网站
')
In [11]: r
Out[11]: ['首页 - CK的官方网站,首页 - Michael翔的官方网站']
PHPz
PHPz

学习是最好的投资!

全部回复(1)
天蓬老师

d+表示找到一个或多个数字,但期望的是更长的串;d+?表示去匹配满足要求的尽可能短的串。

圆括号,表示要捕获的分组。

在这个例子中,在(\d+)会把102300都匹配完,(0*)因为可以匹配零个或者多个0,这里0个0也会被捕获,所以出现了空串。

In [12]: re.match(r'^(\d+)(0*)$', '102300').groups()
Out[12]: ('102300', '')

在这个例子中,为了匹配到尽可能短的串,就把0分给了后面的(0*)分组了。

In [13]: >>> re.match(r'^(\d+?)(0*)$', '102300').groups()
Out[13]: ('1023', '00')
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号