免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
123下一页
最近访问板块 发新帖
查看: 10544 | 回复: 29
打印 上一主题 下一主题

grep 正则表达式{n,m}的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-08-03 16:10 |只看该作者 |倒序浏览
一个文本由两行:
abbccdd
abbbccdd

如果用grep -E 'b{2}' 进行查找,两行都能找出来。  而我的理解是应该只能找出第一行。 谁能帮忙解释一下。

论坛徽章:
5
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:50:282015年亚洲杯之朝鲜
日期:2015-03-13 22:47:33IT运维版块每日发帖之星
日期:2016-01-09 06:20:00IT运维版块每周发帖之星
日期:2016-03-07 16:27:44
2 [报告]
发表于 2009-08-03 16:12 |只看该作者

回复 #1 sardinescn 的帖子

两行都包含"bb",所以都显示啰。

论坛徽章:
23
15-16赛季CBA联赛之吉林
日期:2017-12-21 16:39:27白羊座
日期:2014-10-27 11:14:37申猴
日期:2014-10-23 08:36:23金牛座
日期:2014-09-30 08:26:49午马
日期:2014-09-29 09:40:16射手座
日期:2014-11-25 08:56:112015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:49:0315-16赛季CBA联赛之山东
日期:2017-12-21 16:39:1915-16赛季CBA联赛之广东
日期:2016-01-19 13:33:372015亚冠之山东鲁能
日期:2015-10-13 09:39:062015亚冠之西悉尼流浪者
日期:2015-09-21 08:27:57
3 [报告]
发表于 2009-08-03 16:13 |只看该作者

回复 #1 sardinescn 的帖子

结果告诉你,你理解错了。

论坛徽章:
0
4 [报告]
发表于 2009-08-03 16:40 |只看该作者
如果是这样的话,那么{N}, {N,} {N,M}还有什么意义?

论坛徽章:
5
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:50:282015年亚洲杯之朝鲜
日期:2015-03-13 22:47:33IT运维版块每日发帖之星
日期:2016-01-09 06:20:00IT运维版块每周发帖之星
日期:2016-03-07 16:27:44
5 [报告]
发表于 2009-08-03 16:44 |只看该作者

回复 #4 sardinescn 的帖子

=3,>=3,>=3且<=9有啥意义?

论坛徽章:
0
6 [报告]
发表于 2009-08-03 16:56 |只看该作者
我的意思是说,在我说的那个例子中, {2}搜出来的是两个, {2,}搜出来的似乎两个, {2,3}搜出来的也是两个。 也就是说,正则表达式中匹配最大次数的限定并没有体现出来。

论坛徽章:
1
巨蟹座
日期:2014-06-04 13:33:30
7 [报告]
发表于 2009-08-03 16:58 |只看该作者
{N} 有N个
{N,} 至少有N个
{N,M} 最少N个,最多M个

* 要么没有,要么很多
+ 要么一个,要么很多个
? 要么没有,要么一个

论坛徽章:
23
15-16赛季CBA联赛之吉林
日期:2017-12-21 16:39:27白羊座
日期:2014-10-27 11:14:37申猴
日期:2014-10-23 08:36:23金牛座
日期:2014-09-30 08:26:49午马
日期:2014-09-29 09:40:16射手座
日期:2014-11-25 08:56:112015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:49:0315-16赛季CBA联赛之山东
日期:2017-12-21 16:39:1915-16赛季CBA联赛之广东
日期:2016-01-19 13:33:372015亚冠之山东鲁能
日期:2015-10-13 09:39:062015亚冠之西悉尼流浪者
日期:2015-09-21 08:27:57
8 [报告]
发表于 2009-08-03 17:01 |只看该作者

回复 #6 sardinescn 的帖子

有一点你需要理解,如果一个条记录匹配bbb
那么它一定也匹配 bb 或 b

换句话讲,如果一条记录匹配一串字符
那么它一定也匹配 这串字符的任意连续子串

论坛徽章:
0
9 [报告]
发表于 2009-08-03 17:02 |只看该作者

回复 #7 xiaobaibbb 的帖子

那{2,2}呢? 我运行的结果还是两个全给找出来了。
如果绕开这种特殊的情况,再在文本中加一行abbbbccdd.
grep -E 'b{2,3}'  
搜出来的结果是3行而不是2行。

论坛徽章:
0
10 [报告]
发表于 2009-08-03 17:05 |只看该作者
原帖由 ly5066113 于 2009-8-3 17:01 发表
有一点你需要理解,如果一个条记录匹配bbb
那么它一定也匹配 bb 或 b

换句话讲,如果一条记录匹配一串字符
那么它一定也匹配 这串字符的任意连续子串


你说的如果单独看是可以理解的。
我不理解的是正则表达式对于{n,m}的说明是:
{n,m}  The preceding item is matched at least n times, but not more than m times。(摘自man grep)

但是我目前没有发现最大匹配次数这个限定在起作用。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP