2017-05-22 6 views
0

Je traite actuellement une requête comme ceci:Expression régulière dans l'erreur de lancement C++ "parenthèse ouvrante spéciale non valide".

a.b.c.d.e ~ f

et je suis en train d'extraire a, b, c, d, e et f. J'ai fait quelques progrès en extrayant des valeurs séparées par des périodes, mais je suis toujours coincé comme il semble que la requête spéciale que j'ai pour extraire le dernier élément (ajouté par le tilde "~") avec le PCRE (?<=~).*, comme il échoue à l'exécution.

Je reçois une erreur assez unique (au moins selon Google) qui est "

terminate called after throwing an instance of 'std::regex_error' 
    what(): Invalid special open parenthesis. 
Aborted (core dumped) 

Voici le code que j'ai:

#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; 
} 

et je suis compilez avec g ++ - std = C++ 14 et la version gcc 6.2.0 sur Ubuntu 16.08.

Toute aide serait très appréciée. Merci!

Répondre

0

Si vous souhaitez utiliser des parenthèses, vous devez leur échapper avec une barre oblique inverse. Voici un exemple

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

Il n'essaie pas de faire correspondre les parens, mais fait des groupes. – Donnie