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

时间:2017-09-06 03:57:25

标签: pcre

我想用pcre2匹配字符串。 例如,我有几个字符串模式," a"," b"," c"," d"和" E&#34 ;. 我有一个很长的文字" str"匹配。 现在我构建一个模式" a | b | c | d | e"匹配" str"使用pcre2_match。 如何知道哪种模式匹配? 我只想获得匹配的模式编号,而不是" a"或者" b",因为我不想将匹配的模式与" a"," b"," c"进行比较。 " d"" E"试。

1 个答案:

答案 0 :(得分:0)

假设您正在直接使用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并找到某种方法将模式偏移映射到分支,然后记住在结束之前看到的最后一个模式偏移匹配