当前时区为 UTC + 8 小时



发表新帖 回复这个主题  [ 4 篇帖子 ] 
作者 内容
1 楼 
 文章标题 : [问题]正则表达式 "(\w)((?=\1\1\1)(\1))+"的解读
帖子发表于 : 2007-12-18 23:20 

注册: 2007-01-13 14:55
帖子: 63
送出感谢: 0 次
接收感谢: 0 次
表达式 "(\w)((?=\1\1\1)(\1))+" 在匹配字符串 "aaa ffffff 999999999" 时,将可以匹配6个"f"的前4个,可以匹配9个"9"的前7个。这个表达式可以读解成:重复4次以上的字母数字,则匹配其剩下最后2位之前的部分。
为什么会解读成这样子的?
为什么会剩下最后两位没有匹配的?


页首
 用户资料  
 
2 楼 
 文章标题 :
帖子发表于 : 2007-12-19 12:57 

注册: 2006-01-18 15:01
帖子: 1074
送出感谢: 0 次
接收感谢: 1
(?=\1\1\1)表示该位置后面跟有3个\1


页首
 用户资料  
 
3 楼 
 文章标题 : Re: [问题]正则表达式 "(\w)((?=\1\1\1)(\1))+"的解读
帖子发表于 : 2008-01-15 10:34 
头像

注册: 2005-07-21 19:13
帖子: 681
地址: Peking, China
送出感谢: 0 次
接收感谢: 0 次
JIAN 写道:
表达式 "(\w)((?=\1\1\1)(\1))+" 在匹配字符串 "aaa ffffff 999999999" 时,将可以匹配6个"f"的前4个,可以匹配9个"9"的前7个。这个表达式可以读解成:重复4次以上的字母数字,则匹配其剩下最后2位之前的部分。
为什么会解读成这样子的?
为什么会剩下最后两位没有匹配的?


1. \w 先匹配到一个英数字符。
2. (?=\1\1\1)\1 匹配第一个 group 中匹配到的字符3次——表面上看这个表达式匹配了4个字符,实际上只要3个相同的字符就能满足匹配要求。加上之前的 \w,就是要求匹配重复一个4次以上的英数字符串。
3. 最后面的 + 限定了第二个 group: ((?=\1\1\1)\1),也就是要求在匹配字符之后至少存在3个或者3个以上的重复字符才能匹配成功,所以当匹配到重复字符串末尾只剩两个字符的时候,该表达式即不能匹配成功,所以最后2个重复字符是永远会被排除在匹配到的字符串之外的。


页首
 用户资料  
 
4 楼 
 文章标题 :
帖子发表于 : 2008-01-15 20:19 

注册: 2007-01-13 14:55
帖子: 63
送出感谢: 0 次
接收感谢: 0 次
哦,明白了
谢谢!!!


页首
 用户资料  
 
显示帖子 :  排序  
发表新帖 回复这个主题  [ 4 篇帖子 ] 

当前时区为 UTC + 8 小时


在线用户

正在浏览此版面的用户:没有注册用户 和 4 位游客


不能 在这个版面发表主题
不能 在这个版面回复主题
不能 在这个版面编辑帖子
不能 在这个版面删除帖子
不能 在这个版面提交附件

前往 :  
本站点为公益性站点,用于推广开源自由软件,由 DiaHosting VPSBudgetVM VPS 提供服务。
我们认为:软件应可免费取得,软件工具在各种语言环境下皆可使用,且不会有任何功能上的差异;
人们应有定制和修改软件的自由,且方式不受限制,只要他们自认为合适。

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
简体中文语系由 王笑宇 翻译