PCRE PartialMatch动态组数

时间:2014-12-26 13:04:47

标签: c++ c++11 pcre

我的应用具有用户定义的正则表达式模式,最多可包含3个捕获组。有没有更好的方法来实现以下代码?

std::string glyph1, glyph2, glyph3;

switch (regex.NumberOfCapturingGroups())
{
    case 0:
    default:
        found = regex.PartialMatch(word);
        break;
    case 1:
        found = regex.PartialMatch(word, &glyph1);
        break;
    case 2:
        found = regex.PartialMatch(word, &glyph1, &glyph2);
        break;
    case 3:
        found = regex.PartialMatch(word, &glyph1, &glyph2, &glyph3);
        break;
}

if (found) {
    // ...
}

不幸的是,如果正则表达式匹配但返回的值为false,那么请求的捕获组就会减少。

1 个答案:

答案 0 :(得分:0)

您可以使用列表或向量来解决此问题。而不是重载函数,而是为vector<std::string> glyph创建一个参数int nregex.NumberOfCapturingGroups()

vector<std::string> glyph;
regex.PartialMatch(word, glyph, regex.NumberOfCapturingGroups());
if (found) {
    // ...
}

然后只需使用glyph[i]来访问元素。