免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
123
最近访问板块 发新帖
楼主: wangcn
打印 上一主题 下一主题

a(?=b)c匹配的是什么? [复制链接]

论坛徽章:
1
荣誉会员
日期:2011-11-23 16:44:17
21 [报告]
发表于 2009-04-21 09:26 |只看该作者
原帖由 wangcn 于 2009-4-20 16:14 发表
我是在另一个地方看到有人要匹配abc,但是顺序不定,最后那人给的答案是(?=.*a.*)(?=.*b.*)(?=.*c.*)\w+,能解释下吗?


这个正则会匹配一段含有a,b,c三个字符至少出现一次的串,其中夹杂其它字母数字也可以。不过可以简化一下:
(?=.*a)(?=.*b)(?=.*c)\w+
改成上面这样效果是一样的。
(?=re)匹配一个位置,它的后面匹配re。所以(?=.*a)(?=.*b)(?=.*c)就表示一个位置,后面必须出现一个带有a的串,一个带有b的串还有一个带有c的串。因此整个表达式就是匹配一个串,由字母数字下划线构成,并且abc至少出现一次。

如果要匹配不重复的abc连在一起,中间没有其它字符,换句话说匹配abc的各种排列,可以写成这样:
(?!.?(.)\1|(.).\2)[abc]{3}

论坛徽章:
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
22 [报告]
发表于 2009-04-21 10:00 |只看该作者
原帖由 woodie 于 2009-4-21 09:26 发表

这个正则会匹配一段含有a,b,c三个字符至少出现一次的串,其中夹杂其它字母数字也可以。不过可以简化一下:
(?=.*a)(?=.*b)(?=.*c)\w+
改成上面这样效果是一样的。
(?=re)匹配一个位置,它的后面匹配re。所以(?=.*a)(?=.*b)(?=.*c)就表示一个位置,后面必须出现一个带有a的串,一个带有b的串还有一个带有c的串。因此整个表达式就是匹配一个串,由字母数字下划线构成,并且abc至少出现一次。

如果要匹配不重复的abc连在一起,中间没有其它字符,换句话说匹配abc的各种排列,可以写成这样:
(?!.?(.)\1|(.).\2)[abc]{3}


学习了。
(?!.?(.)\1|(.).\2)[abc]{3}  试着领悟下这个正则:

[abc]{3} 匹配了 abc 3个字母的所有排列,包括单个字母重复出现的情况
.?(.)\1  匹配 2个字符连续出现的情况
(.).\2    匹配 3个字符中首尾2个字符相同的情况
.?(.)\1|(.).\2  匹配 3个字符会出现重复的所有情况
(?!pattern)  向前断言不匹配,也就是从[abc]{3}排除了出现重复字母的所有情况

论坛徽章:
3
戌狗
日期:2014-09-10 17:07:162015年辞旧岁徽章
日期:2015-03-03 16:54:15wusuopu
日期:2016-06-17 17:43:45
23 [报告]
发表于 2009-04-21 10:05 |只看该作者
学习一下

论坛徽章:
0
24 [报告]
发表于 2009-04-21 16:50 |只看该作者
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP