正则表达式中的重叠匹配

我似乎找不到这个问题的答案,而且我想知道是否存在。简化示例:

考虑一个字符串“ nnnn”,在这里我想找到所有“ nn”的匹配项,但还要查找彼此重叠的匹配项。因此,正则表达式将提供以下3个匹配项:

  1. nn
  2. n n
  3. nn

我意识到这并不是正则表达式的确切含义,但是考虑到实际上匹配必须使用模式(而不是文字字符串)来完成,因此遍历字符串并手动解析它似乎是很多代码。

回答:

一个可能的解决方案是在后面使用正面的外观:

(?<=n)n

它会给您以下的最终位置:

    • n nn

  1. n * n n
  2. nn * n


正如Timothy Khouri所提到的 ,

更加直观

我更喜欢他的主张(?=nn)n,更简单的形式是:

(n)(?=(n))

那将引用您想要的字符串的 , 。

之所以这样,是因为:

  • 可以在lookahead内部使用任何有效的正则表达式。
  • 如果包含捕获括号, 。

因此,group(1)和group(2)将捕获’n’表示的任何内容(即使它是一个复杂的正则表达式)。

以上是 正则表达式中的重叠匹配 的全部内容, 来源链接: utcz.com/qa/432245.html

回到顶部