regex — Ошибка в регулярном выражении в C ++ «Неверные специальные открытые скобки.»

В настоящее время я имею дело с таким запросом:

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.

Любая помощь будет наиболее ценной. Спасибо!

0

Решение

Если вы хотите использовать скобки, вам нужно экранировать их обратной косой чертой. Вот пример

std::string regexstring = "\\([a-z]\\):\\([0-9]\\)";
1

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector