如何在pcre2中获得匹配的组号

how to get matched group number in pcre2

我想用pcre2来匹配字符串。 例如,我有几个字符串模式,"a"、"b"、"c"、"d" 和 "e"。 我有一个长文本 "str" 需要匹配。 现在我构造一个模式 "a|b|c|d|e" 来匹配 "str" 使用 pcre2_match。 如何知道匹配了哪个模式? 我只想获取匹配的模式编号,而不是 "a" 或 "b",因为我不想将匹配的模式与 "a"、"b"、[=14 进行比较=],"d","e" 再一次。

假设您直接使用 PCRE2 库并可以访问其所有功能,那么您有多种解决方案,从最简单到最复杂:

  • 使用编号的捕获组:(a)|(b)|(c)|(d)
  • 使用命名捕获组:(?<a>a)|(?<b>b)|(?<c>c)|(?<d>d)
  • 使用marksa(*MARK:a)|b(*MARK:b)|c(*MARK:c)|d(*MARK:d)
  • 使用calloutsa(?C{a})|b(?C{b})|c(?C{c})|d(?C{d})
  • 如果你真的不能修改你的输入模式,使用PCRE2_AUTO_CALLOUT并找到一些方法将模式偏移映射到分支,然后记住最后看到的模式偏移比赛结束前