这个正则表达式的结果是什么?

时间:2014-11-13 15:06:29

标签: regex

假设我有这种模式,我希望找到[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]

谁是对的?我还是网站?为什么?

2 个答案:

答案 0 :(得分:2)

  

谁是对的?我还是网站?

网站

  

为什么?

因为\[a\]\[a\]正则表达式在第一次迭代期间匹配前两个[a][a]。对于第二次迭代,它不会进行重叠匹配,即在第一次迭代期间第二个[a]已经匹配,因此第三个和第四个[a]匹配而不是两个和三个。使用前瞻,按顺序进行重叠捕获。

答案 1 :(得分:0)

这取决于模式。

(\[a\])(?=(\[a\])|$)

试试这个。这种模式会使你的答案正确。看看右边的比赛。

http://regex101.com/r/pQ9bV3/7

(\[a\])(\[a\])

这将使网站正确。请参阅右侧的匹配。

http://regex101.com/r/pQ9bV3/8