В настоящее время я имею дело с таким запросом:
a.b.c.d.e ~ е
и я пытаюсь извлечь a, b, c, d, e и f.
Я добился некоторого прогресса в извлечении значений, разделенных точками, но я все еще застрял, так как кажется, что у меня есть специальный запрос для извлечения последнего элемента (с добавлением тильды «~») с помощью PCRE (?<=~).*
, как это не удается во время выполнения.
Я получаю довольно уникальную ошибку (по крайней мере, в соответствии с Google), которая «
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;
}
и я собираю его с g ++ -std = c ++ 14 и gcc версии 6.2.0 в Ubuntu 16.08.
Любая помощь будет наиболее ценной. Спасибо!
Если вы хотите использовать скобки, вам нужно экранировать их обратной косой чертой. Вот пример
std::string regexstring = "\\([a-z]\\):\\([0-9]\\)";
Других решений пока нет …