gpt4 book ai didi

c++ - 在 C++ 中从正则表达式中排除子表达式

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:58:05 26 4
gpt4 key购买 nike

假设我尝试使用 C++ 中的 regex.h 匹配以下表达式,并尝试获取包含的子表达式:

/^((1|2)|3) (1|2)$/

假设它与字符串“3 1”匹配,子表达式将是:

"3 1"
"3"
"1"

如果它与字符串“2 1”匹配,则子表达式将是:

"2 1"
"2"
"2"
"1"

这意味着,根据第一个子表达式的计算方式,最后一个位于 pmatch 数组的不同元素中。我意识到这个特定示例很简单,因为我可以删除其中一组括号,或获取数组的最后一个元素,但在更复杂的表达式中它会出现问题。

假设我想要的只是顶级子表达式,即不是其他子表达式的子表达式的子表达式。有什么办法只能得到它们吗?或者,要知道在一个子表达式中匹配了多少个子表达式,以便我可以遍历数组而不考虑它的计算方式?

谢谢

最佳答案

解决这个问题有两种常见的方法:

  • 命名捕获组:(?P<name>) ,因此您可以按名称显式提取捕获的组。
  • 非捕获组,通常为:(?: blah) ,这样该组就不会成为生成的组列表的一部分,其余的将保持预期的顺序。

不清楚您使用的是哪种正则表达式方言,所以我不知道它是否支持这两种方法,但请查看 this regex comparison chart .

将 (1|2) 组变成非捕获组看起来像:

/^((?:1|2)|3) (1|2)$/

关于c++ - 在 C++ 中从正则表达式中排除子表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3031105/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com