2010-12-21 3 views
12

Kann ich die Zeichenfolge mit regulärem Ausdruck von std::regex bekommen? Oder sollte ich es irgendwo anders speichern, wenn ich es später benutzen möchte?Wie bekomme ich einen String mit einem Muster von std :: regex in VC++ 2010

In Boost können Sie dies tun:

boost::regex reg("pattern"); 
string p = reg.str(); 

oder benutzen < < Betreiber

cout << reg;Muster gedruckt wird.

aber in std::regex gibt es keine str() oder Operator < <. Soll ich meinen String irgendwo anders speichern oder finde ihn einfach nicht?

Im Debugger kann ich sehen, was in std::regex ist.

+0

Bitte bearbeiten Sie diese Frage, ich bezweifle sehr, dass gegeben '" pattern "' es 'aaa' drucken wird. – Motti

Antwort

8

ich gerade in N3225 sehe, Abschnitt 28.4 (Header <regex> Synopse) und in der Tat, die basic_regex Vorlage hat keine Memberfunktion str, und es gibt keine operator<< zur Verfügung gestellt.

Der Absatz 28.8/2 liefert einen kleinen Einblick dazu:

Objekte vom Typ Spezialisierung der basic_regex sind verantwortlich für die Sequenz von charT Objekte eine interne Darstellung umwandelt. Es ist nicht angegeben, welche Form diese Darstellung nimmt, noch wie sie auf zugegriffen wird durch Algorithmen, die auf regulären Ausdrücken arbeiten.

Was ich verstehe, ist, dass die Standard schreibt vor, dass basic_regex von const charT * aufgebaut werden kann, aber nicht erforderlich, die Umsetzung dieser Zeichenfolge zu halten.

+0

Warum C++ macht es so schwer ... – user1633272

4

The MSDN docs scheinen zu zeigen, dass es keine öffentlich zugängliche Möglichkeit gibt, das Regex-Muster von einem konstruierten Objekt abzurufen, also würde ich sagen, dass Sie die Zeichenfolge selbst speichern müssen.

Verwandte Themen