C ++ regex nicht verstanden

8

Die folgenden Ausgaben "& gt; Hut", wo ich erwarte, dass es "Hut" ausgibt. Ich weiß das. * Ist gierig, aber & gt; muss übereinstimmen und es ist außerhalb der Erfassungsgruppe, also warum ist es in meinem submatch?

%Vor%     
Xu Wang 05.06.2012, 06:51
quelle

2 Antworten

7

Dies ist ein Fehler in der libstdc ++ Implementierung. Sieh dir diese an:

%Vor%

Wenn Sie mit gcc kompilieren, gibt das erste (libstdc ++) das völlig falsche Ergebnis 9, -2, 4 zurück und das zweite (boost's implementation) gibt 5, 1, 3 zurück wie erwartet.

Wenn Sie mit clang + libc ++ kompilieren, funktioniert Ihr Code gut.

(Beachten Sie, dass die Regex-Implementierung von libstdc ++ nur teilweise unterstützt wird, wie in Ссылка beschrieben .)

    
kennytm 05.06.2012, 08:07
quelle
3

Sie können Ihren regulären Ausdruck so ändern, dass übereinstimmende Teile in Gruppen unterteilt werden:

%Vor%

Ausgänge:

%Vor%

Beachten Sie, dass Gruppen durch die Klammern ( /* your regex here */ ) angegeben werden und wenn Sie einen bracet-Teil Ihres Ausdrucks erstellen möchten, müssen Sie ihn mit \ ausschließen, was \ im Code ist. Weitere Informationen finden Sie unter Gruppierungskonstrukte .

Diese Frage kann Ihnen auch helfen: Wie durchlaufe ich Ergebnisse von std :: regex_search?

Verwenden Sie auch using namespace std; nicht am Anfang Ihrer Dateien, es ist eine schlechte Übung.

    
LihO 05.06.2012 08:16
quelle

Tags und Links