正则表达式匹配重叠时会发生什么

What happens when regex matches overlap?

本文关键字:什么 重叠 正则表达式      更新时间:2023-10-16

在C++11中,如果正则表达式的匹配项彼此交叉,会发生什么?例如,如果源字符串是"ababa",正则表达式是"aba",首先,如果我迭代字符串中正则表达式的匹配项,是有两个匹配项还是只有一个匹配项?接下来,如果我使用regex_replace将"aba"的所有实例替换为"C",最终结果会是什么?

我无法测试它,因为我还没有访问支持regex的编译器。

将有一个匹配,替换结果将为Cba

说明:

  • 正则表达式引擎从字符串中的第一个位置开始
  • 它尝试匹配aba并成功
  • aba替换为C(结果:Cba
  • 它尝试从当前位置(在Cba之间)再次匹配aba
  • 它在这里失败(也从下一个位置(就在最后一个a之前)和下一个(在字符串末尾)失败)
  • 就是这样