免费注册 查看新帖 |

Chinaunix

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

[文本处理] 请教一个正则表达式的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2013-05-07 20:11 |只看该作者 |倒序浏览
echo "717ak" | egrep '.*(.).*\1'  

怎么匹配717了  

求解

论坛徽章:
4
白羊座
日期:2013-09-17 21:59:30技术图书徽章
日期:2013-10-12 22:16:03白羊座
日期:2013-10-14 11:01:40双子座
日期:2013-12-17 18:26:39
2 [报告]
发表于 2013-05-07 20:33 |只看该作者
.*匹配空
(.)匹配7
.*匹配1
\1是7

论坛徽章:
0
3 [报告]
发表于 2013-05-07 20:39 |只看该作者
回复 2# 井蛙夏虫


    为什么.*只匹配空  而不是贪婪的

论坛徽章:
4
白羊座
日期:2013-09-17 21:59:30技术图书徽章
日期:2013-10-12 22:16:03白羊座
日期:2013-10-14 11:01:40双子座
日期:2013-12-17 18:26:39
4 [报告]
发表于 2013-05-07 20:49 |只看该作者
我的理解是这样的:
贪婪的应当是对整个正则表达式而言的。
在整个正则表达式能匹配多种的情况下,它匹配最长的。但前提应当是它尽可能的匹配成功。

论坛徽章:
0
5 [报告]
发表于 2013-05-07 21:06 |只看该作者
回复 4# 井蛙夏虫

有道理  echo "kkaa091123" | egrep '.*(.).*\1'  匹配 kkaa0911 但为什么会匹配到09了


   

论坛徽章:
6
摩羯座
日期:2013-08-24 10:43:10狮子座
日期:2013-08-25 10:27:06天秤座
日期:2013-09-11 20:28:44午马
日期:2014-09-28 16:06:0015-16赛季CBA联赛之八一
日期:2016-12-19 13:55:0515-16赛季CBA联赛之天津
日期:2016-12-20 14:01:23
6 [报告]
发表于 2013-05-07 22:20 |只看该作者
本帖最后由 cao627 于 2013-05-07 22:25 编辑

@allen08pm
所谓贪婪可以想像为:正则想把字符串最后一个字符(即最右的字符)也想“吃”掉。
所以表达式最后的 \1首先会锁定字符串最右的字符3,然后在3的左边找3,找不到,不能”吃“  左移到2,在2的左边找2,还是找不到....如此依次向左。
当锁定到1时向左找到1,"吃“掉。此时第一个.* 囫囵匹配kkaa09了事(即只要(.).*\1有落实了,前边的.*的就不去细究了),    第二个*作零次。整个'.*(.).*\1'  ”吃掉"  kkaa0911
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP