关于正则表达式正向预搜素问题的疑惑,求解答

hackthissite 2011-04-22 03:03:27
正向预搜索:“(?=xxxxx)”
在被匹配的字符串中,它对所处的“缝隙”或者“两头”附加的条件是:所在缝隙的右侧,必须能够匹配上 xxxxx 这部分的表达式。因为它只是在此作为这个缝隙上附加的条件,所以它并不影响后边的表达式去真正匹配这个缝隙之后的字符。

这段话的意思我能理解。
比如“(\w)((\1)(?=\1\1\1))+”将匹配“aaa ffffff 999999999”红色字体部分。

我不能立即的是下面这段:


表达式“(\w)((?=\1\1\1)(\1))+”在匹配字符串“aaa ffffff 999999999”时,将可以匹配6个“f”的前4个,可以匹配9个“9”的前7个。这个表达式可以读解成:重复4次以上的字母数字,则匹配其剩下最后2位之前的部分。当然,这个表达式可以不这样写,在此的目的是作为演示之用。


这个怎么理解呢?为啥是重复4次以上的字母数字,则匹配其剩下最后2位之前的部分?

求释疑。3ks
...全文
103 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
hackthissite 2011-04-22
  • 打赏
  • 举报
回复
比较认同三楼的解答
Mr-Jee 2011-04-22
  • 打赏
  • 举报
回复
你的理解是错误的

(\w)((?=\1\1\1)(\1))+

首先\w是没有问题的
((?=\1\1\1)(\1))+
这样的正则中 我们拆开来看
(\1)+
但是加了一个正向预查
于是在每次匹配这个\1之前我要做一次预查。比如
aaaaa
红色部分是被\w匹配了。
接下来匹配
aaaaa
在这个红色的a之前的位置开始做预查。如果后面有3个a
那么这个(?=\1\1\1)成立,则aaaaa中的红a匹配
接下来匹配
aaaaa
做预查。(?=\1\1\1)成立,则该字符匹配
接下来aaaaa
这个时候预查就不成功了,因为只有2个a了。匹配结束
knightzhuwei 2011-04-22
  • 打赏
  • 举报
回复
对于99999和(\w)((?=\1\1\1)(\1))+
\w匹配第一个9
其后的缝隙匹配(?=\1\1\1)
(\1)匹配第二个9
继续尝试匹配((?=\1\1\1)(\1))
第二个9其后的缝隙匹配(?=\1\1\1)
(\1)匹配第三个9
继续尝试匹配((?=\1\1\1)(\1))
第三个9其后的缝隙不匹配(?=\1\1\1)
匹配失败
knightzhuwei 2011-04-22
  • 打赏
  • 举报
回复
这玩意儿不好解释啊。。。
因为如果匹配剩下一位之前的部分 则(?=\1\1\1)不能匹配 而由于是贪婪模式 所以就是最后第二位了

87,910

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧