2016-10-21 1 views
18

TatWarum wird regex "([a-z]) ((?! \ 1) [a-z])" Zeichenfolge "aa" in C++ 11?

regex pattern("([a-z])((?!\\1)[a-z])"); 
cout << regex_match("aa", pattern) << endl; 

Ergebnisse in der Ausgabe "1", doch die erste Gruppe abgestimmt ist "a" ausgeführt wird, und wenn ich stattdessen laufen

regex pattern("([a-z])((?!a)[a-z])"); 
cout << regex_match("aa", pattern) << endl; 

I "0" erhalten, wie erwartet.

Beachten Sie, dass genau die gleiche Regex in Python wie erwartet funktioniert 3, das heißt

re.match("([a-z])((?!\\1)[a-z])", "aa") 

läuft produziert keine Treffer. Kann jemand erklären, was hier passiert?

Als Referenz verwende ich g ++ (tdm64-1) 5.1.0 mit Flags -O2 und -std = C++ 11.

+1

zeigt 1 für alle Sprachen [hier] (https://regex101.com/r/nUvaOA/1) – NathanOliver

+2

@NathanOliver Sie nur einzelne Schrägstriche verwenden sollten, wenn sie mit regex101 –

+0

@SebastianProske Nun schaut euch das an zu arbeiten. Danke für die Information. TIL. – NathanOliver

Antwort

3

Weil es in GCC5 abgehört wurde.
Es funktioniert wie erwartet in GCC6 und MSVC14.

Verwandte Themen