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