找回密码
 加入
搜索
查看: 3108|回复: 5

[AU3基础] 正则:求练习的解释

[复制链接]
发表于 2011-6-29 15:37:35 | 显示全部楼层 |阅读模式
看:揭开正则表达式的神秘面纱有这样一个练习
字符串是:
aaa ffffff 999999999
正则是
(\w)((?=\1\1\1)(\1))+
它的解释是:
这个表达式可以读解成:重复4次以上的字母数字,则匹配其剩下最后2位之前的部分。很是糊涂!!!???
他这个是零宽断言的   str(?=exp)    形式,那假设\w匹配f,则
?=\1\1\1 可理解为 ?=fff
(?=\1\1\1)(\1) 可理解为 ?=ffff
那这个正则就是  f(?=ffff)+  ,到这步我怎么就进行不下去了,(?=ffff)匹配了ffffff中的第2-5的f,他前面不就剩下1个f可以匹配了吗?至于后面那个+觉得不好解释!
大家觉得这个正则表达式该怎么理解好呢?
发表于 2011-6-29 16:10:06 | 显示全部楼层
+是说至少有一个匹配,这个+前面的字符也是+的一部分
ffffff是6个字符  第一个f对应\w,最后三个对应零宽断言,那么这个正则匹配到的内容为fff
有两个捕获组分别为第一个跟第二个f
就匹配来说 这个正则写的真不怎么滴,但是如果是为了教学的话,其实也没什么

评分

参与人数 1金钱 +20 收起 理由
newuser + 20

查看全部评分

发表于 2011-6-29 17:02:55 | 显示全部楼层
这个正则写的极其复杂,至少对我而言.
以ffffff为例,将每个f标上下标,即f1,f2,f3,f4,f5,f6
1.(\w)作为第一组,匹配第一个字符f1
2.((?=\1\1\1)(\1))+,这是第二组,将这句分解开来,(?=\1\1\1)和(\1)
         第一层意思:(?=\1\1\1)这是一个零宽断言,搜索\w之后至少要有3个相同的字符,加上第一个f则至少要用4个f.即f1,f2,f3,f4或f2,f3,f4,f5或f3,f4,f5,f6
        第二层意思:若上面条件成立的话匹配向右搜索的第一个f(此时这个f作为第二组,有f2,f4两个匹配成功),即在f1,f2,f3,f4中匹配f2.联系第一组中的f1即匹配f1,f2,故上一层意思中的红色部分中f2已经匹配,不再参与,所有只有两种可能,即f1,f2,f3,f4和f3,f4,f5,f6.
       第三层意思,将第二组中成功匹配的作为独立的一组,即第三组,由此可知,第二组与第三组是同一个位置.
       第四层意思:+贪婪模式,作最大的匹配.即搜索凡是右边有三个f,则取第一个右边三个f中的第一个作为结束匹配的意思.在上一层的意思中只有f4成功.
所以匹配到的就是ffffff中的f1,f2,f3,f4
999999999为例可以知道第一组是9,第二组和第三组是9

我的语文水平有限,希望能解释清楚了.

评分

参与人数 1金钱 +30 收起 理由
newuser + 30

查看全部评分

 楼主| 发表于 2011-6-30 08:09:12 | 显示全部楼层
回复 2# love5173
谢谢,只是还不理解!
 楼主| 发表于 2011-6-30 08:14:44 | 显示全部楼层
回复 3# 3mile
谢谢,不过从第2层到第4层意思根本不明白!不知道这个习题到底有多么重要!看了几遍之后想放弃了,但这样就辜负了老大的指点和帮助,真的头疼和迷糊,哎..,.
发表于 2011-6-30 20:15:59 | 显示全部楼层
刚看了那篇文章
按照我说的思路走,在ffffff这个字符串中
第一步:先找到第一个\w 这个你应该很容易找到!就是第一个f
第二步:在第一个f后面寻找符合一下条件的f字母-----f字母前面的这个位置,注意是位置,在这个位置后面有三个f,既fff。为了你理解你这个时候把光标先放在第一个f后面(光标所在的位置肯定是个位置而不是字母,方便你理解),看一下这个时候这个位置满足不满足这个条件,是的,满足!
第三步:在这个位置满足断言条件后,在这个满足条件的位置开始取一个f,也就是表达式里面的\1,这个时候我们已经取到了两个f了
第四步:取完第二个f后把光标向后移动一下,也就是第二个f后面,检查这个地方是不是也满足第二步中的条件,既这个位置的后面有三个fff,有的话就在这个位置后面取一个f,这个时候就三个f了
第五步:重复第二步到第四步的过程,直到找不到这样的位置了,那么这个表达式也就匹配结束了
最后结果ffff
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-12-23 03:31 , Processed in 0.101501 second(s), 28 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表