在pcre ++中命名捕获的子字符串

时间:2010-06-17 00:24:45

标签: c++ regex pcre

我想用pcre ++库捕获命名子字符串。

我知道pcre库具有此功能,但pcre ++尚未实现此功能。

这是我现在的(只是一个简单的例子):

pcrepp::Pcre regex("test (?P<groupName>bla)");

if (regex.search("test bla"))
{
    // Get matched group by name
    int pos = pcre_get_stringnumber(
        regex.get_pcre(),
        "groupName"
    );
    if (pos == PCRE_ERROR_NOSUBSTRING) return;

    // Get match
    std::string temp = regex[pos - 1];

    std::cout << "temp: " << temp << "\n";
}

如果我调试,pos返回1,那是正确的,(?Pbla)是第1个子匹配(0是整个匹配)。应该没问题。但是...... regex.matches()返回0.为什么:S?

顺便说一下。我做正则表达式[pos - 1]因为pcre ++重新索引结果,0指向第一个子匹配,所以1.因此1变为0,2变为1,3变为2等等。

有人知道如何解决这个问题吗?

1 个答案:

答案 0 :(得分:0)

不幸的是,我在我的真实程序中测试了正则表达式,并且正则表达式是不同的。我使用过这样的东西:

(?:/(?P<controller>[^/]+)(?:/(?P<action>[^/]+))?)?

因此,组号转换进行顺利,但是当我尝试访问该组时,由于(?:...)而得到范围索引?组。我刚刚添加了一个检查,如果组索引i在正确的范围内,我可以使用该组。

很抱歉在这里过早询问。