2013-02-25 14 views
11

Ich versuche eine ziemlich einfache Regex-Übereinstimmung in C++ 11 (mit gcc 4.7.2), aber ich habe eine große Menge an Schwierigkeiten. ein Muster mitC++ 11 Regex Matching

std::regex unquoted(R"regex(\s*([^",]+)\s*)regex"); 

bewirkt, dass der Konstruktor wirft eine std::regex_error Ausnahme mit dem Code std::regex_constants::error_escape zu konstruieren versucht wird. Mehrere Regex-Tester haben kein Problem mit dem gleichen Ausdruck, und ich habe versucht, einige der verschiedenen Syntaxoptionen vergeblich zu verwenden. Gibt es etwas grundlegend anderes an der C++ Regex-Syntax, die ich nicht verstehe?

+0

Sie entkamen nicht das Zitat in der Mitte –

+10

[Ja, ich tat] (http://en.wikipedia.org/wiki/C%2B%2B11#New_string_literals) –

+8

GCC Regex ist gebrochen/nicht implementiert. – Xeo

Antwort

17

Siehe gcc's stdc++11 implementation status page - reguläre Ausdrücke sind nicht als von gcc unterstützt 4.8

bearbeitet für die Nachwelt: Wie in den Kommentaren erwähnt, die regex Bibliothek jetzt in libstdc++ und soll in gcc 4.9 und eingeschaltet sein.

+0

Ich habe versucht, es mit Clang zu erstellen und habe das gleiche Ergebnis - ist das, weil unabhängig davon, welchen Compiler ich verwende, mein System die gleiche C++ Standardbibliothek verwendet? –

+3

Nach http://libcxx.llvm.org /, clangs eigene C++ - Standardbibliothek sollte regex unterstützen, wird aber standardmäßig nur unter OSX verwendet.Auf anderen Plattformen verwendet clang standardmäßig die 'native' C++ - Standardbibliothek –

+0

'boost :: regex' ist es dann. Danke für die Hilfe! –