2013-06-02 15 views
6

Ich konvertiere meine boost-basierten regulären Ausdrücke in C++ 11 Regex. Ich habe eine Capture-Gruppe url genannt:C++ 11 Regex Capture-Gruppen nach Name

\s*?=\s*?(("(?<url>.*?)")|('?<url>.*?)')) 

Mit Boost, wenn Sie eine smatch hatte man konnte match.str("url") rufen Sie die Capture-Gruppe mit Namen zu bekommen. Mit std::smatch sehe ich nur indizierte Untertreffer.

Wie bekomme ich Zugriff auf die URL-Erfassung mit der Klasse Std :: Smatch?

+0

Haben Sie '(? P . *?)' Anstelle von '(? . *?)'? – HamZa

+0

@ HamZa Ich bin mir nicht sicher, ob C++ 11 Regex namens Capture-Gruppen unterstützt. Ich habe gerade das ganze Kapitel gelesen, das dem Thema in Stroustrups neuer "C++ Programmiersprache" gewidmet ist und es nicht einmal erwähnt. Und viele der Online-Referenzen scheinen nichts anderes anzuzeigen. –

+0

Es scheint, dass es benannte Gruppen gemäß dieser [Antwort] (http://stackoverflow.com/a/6398650) nicht unterstützt. – HamZa

Antwort

5

Sie können eine Erfassungsgruppe nicht mit dem C++ 11-Standard benennen. C++ 11 regex entspricht der ECMAScript-Syntax. Hier ist ein Link, der alles erklärt http://www.cplusplus.com/reference/regex/ECMAScript/. Obwohl dies vielleicht enttäuschend ist, wenn Sie darüber nachdenken, wird ein echter regulärer Ausdruck dies nicht unterstützen, es ist extra.

+0

Können Sie ein Beispiel veröffentlichen, das eine verschachtelte Gruppe extrahiert? Vielleicht wo das Spiel auf beiden Seiten einer Pfeife sein kann? –

+0

Sie meinen afer das Spiel wurde bereits gemacht – aaronman

+0

Ich möchte im Grunde sehen, wie effizient meine URL basierend auf meinem veröffentlichten Beispiel zu extrahieren, aktualisiert, um nicht auf benannte Erfassungsgruppen beruhen. –