我目前正在处理这样的查询:
a.b.c.d.e〜F
我试图提取a,b,c,d,e和f。
我在提取句点分隔值方面取得了一些进展,但我仍然陷入困境,因为好像我用于提取最后一个元素的特殊查询(由波浪号&#34;〜&#34; )使用PCRE (?<=~).*
,因为它在运行时失败。
我得到一个非常独特的错误(至少根据谷歌),这是&#34;
terminate called after throwing an instance of 'std::regex_error'
what(): Invalid special open parenthesis.
Aborted (core dumped)
这是我的代码:
#include <string>
#include <iostream>
#include <regex>
using namespace std;
int main() {
const string example = "a.b.c~height";
regex regex_query_path(R"rgx([^.]+(?=[^~]*~))rgx");
std::smatch m;
string test = example;
while (std::regex_search (test,m,regex_query_path)) {
cout << "path: " << m[0] << endl;
test = m.suffix().str();
}
regex regex_query_name(R"rgx((?<=~).*)rgx");
test = example;
while (std::regex_search (test,m,regex_query_name)) {
cout << "query: " << m[0] << endl;
test = m.suffix().str();
}
return 0;
}
我在Ubuntu 16.08上用g ++ -std = c ++ 14和gcc 6.2.0版编译它。
任何帮助都将非常感激。谢谢!
答案 0 :(得分:1)
如果要使用括号,则需要使用反斜杠转义它们。这是一个例子
std::string regexstring = "\\([a-z]\\):\\([0-9]\\)";