我想用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等等。
有人知道如何解决这个问题吗?
答案 0 :(得分:0)
不幸的是,我在我的真实程序中测试了正则表达式,并且正则表达式是不同的。我使用过这样的东西:
(?:/(?P<controller>[^/]+)(?:/(?P<action>[^/]+))?)?
因此,组号转换进行顺利,但是当我尝试访问该组时,由于(?:...)而得到范围索引?组。我刚刚添加了一个检查,如果组索引i在正确的范围内,我可以使用该组。
很抱歉在这里过早询问。