【发布时间】:2010-06-17 00:24:45
【问题描述】:
我想用 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 ?
顺便说一句。我做 regex[pos - 1] 因为 pcre++ 重新索引结果,0 指向第一个子匹配,所以 1。所以 1 变成 0,2 变成 1,3 变成 2,等等。
有人知道如何解决这个问题吗?
【问题讨论】:
-
听起来 pcre++ 麻烦多于它的价值:不完整的库,大约 6 年没有发布,笨拙的运算符重载,子匹配索引的蹩脚重新定义......直接使用 pcre 或下载 Google 的 RE2 (@ 987654321@)