假设我有这种模式,我希望找到[a][a]
假设我将测试我的模式查找器的文本是:[a][a][a][a][a][a][a][a]
我的模式查找器会在第一次迭代时返回这些结果:
[a][a][a][a][a][a][a][a]
[a][a]
第二次迭代:
[a][a][a][a][a][a][a][a]
[a][a]
换句话说,模式“跳过”一个项目向右。
我在一些正则表达式网站上测试了我的正则表达式,我看到的是他们在模式的长度上向前跳过 - 在视觉上看起来像这样:
第一次迭代:
[a][a][a][a][a][a][a][a]
[a][a]
第二次迭代:
[a][a][a][a][a][a][a][a]
[a][a]
谁是对的?我还是网站?为什么?
答案 0 :(得分:2)
谁是对的?我还是网站?
网站
为什么?
因为\[a\]\[a\]
正则表达式在第一次迭代期间匹配前两个[a][a]
。对于第二次迭代,它不会进行重叠匹配,即在第一次迭代期间第二个[a]
已经匹配,因此第三个和第四个[a]
匹配而不是两个和三个。使用前瞻,按顺序进行重叠捕获。
答案 1 :(得分:0)
这取决于模式。
(\[a\])(?=(\[a\])|$)
试试这个。这种模式会使你的答案正确。看看右边的比赛。
http://regex101.com/r/pQ9bV3/7
(\[a\])(\[a\])
这将使网站正确。请参阅右侧的匹配。