2017-05-22 4 views
0

Ich bin derzeit mit einer Abfrage wie folgt tun:Regulärer Ausdruck in C++ - Fehler "Ungültige spezielle öffnende Klammer".

a.b.c.d.e ~ f

und ich versuche, a, b, c, d, e und f zu extrahieren.

Ich habe einige Fortschritte beim Extrahieren von Perioden getrennt Werte gemacht, aber ich bin immer noch fest, als ob die spezielle Abfrage ich habe für das Extrahieren des letzten Elements (vor der Tilde "~") mit der PCRE (?<=~).*, als es schlägt zur Laufzeit fehl.

Ich bin einen ziemlich einzigartigen Fehler bekommen (zumindest zum Google nach), der "

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

Hier ist der Code, den ich habe, ist:

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

und ich bin Kompilieren mit g ++ - std = C++ 14 und gcc Version 6.2.0 auf Ubuntu 16.08.

Jede mögliche Hilfe geschätzt würde. Vielen Dank!

Antwort

0

Wenn Sie Klammern verwenden möchten, müssen Sie sie mit einem Backslash schützen. Hier ist ein Beispiel

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

Er versucht nicht Parens zu entsprechen, aber Gruppen zu tun. – Donnie