我似乎找不到这个问题的答案,而且我想知道是否存在。简化示例:
考虑一个字符串“ nnnn”,在这里我想找到所有“ nn”的匹配项,但还要查找彼此重叠的匹配项。因此,正则表达式将提供以下3个匹配项:
我意识到这并不是正则表达式的确切含义,但是考虑到实际上匹配必须使用模式(而不是文字字符串)来完成,因此遍历字符串并手动解析它似乎是很多代码。
一个可能的解决方案是在后面使用正面的外观:
(?<=n)n
它会给您以下的最终位置:
正如Timothy Khouri所提到的 , 积极的前瞻 更加直观
我更喜欢他的主张(?=nn)n,更简单的形式是:
(?=nn)n
(n)(?=(n))
那将引用您想要的字符串的 第一个位置 , 并捕获group(2)中的第二个n 。
之所以这样,是因为:
因此,group(1)和group(2)将捕获’n’表示的任何内容(即使它是一个复杂的正则表达式)。