2016-04-14 10 views
-1

Boost-Version 1.60.0 gcc 4.8.4Boost-regex Ausnahme von Konstruktor geworfen für * {

Wenn ich ein boost :: regex Objekt mit dem String konstruieren. .*{ Ich erhalte eine Ausnahme, dass die besagt:

Dieser Fehler tritt auf, wenn das Objekt ein boost::regex::extended Typ ist, aber nicht, wenn es boost::regex::perl ist.

So wirft die im Anschluss an die Ausnahme:

regString(".*{"); 
boost::regex reg_e(regString, boost::regex::extended); 

aber nicht:

regString(".*{"); 
boost::regex reg_p(regString, boost::regex::perl); 

Ist das erwartete Verhalten oder ein Bug?
Wenn es erwartet wird, warum? und was ist eine angemessene Arbeit?

Antwort

2

{ ist ein Sonderzeichen in diesem Zusammenhang, Sie müssen es zu entkommen.

http://www.boost.org/doc/libs/1_60_0/libs/regex/doc/html/boost_regex/syntax/perl_syntax.html

Beachten Sie, dass die „{“ und „}“ Zeichen als gewöhnliche Literale , wenn sie in einem Kontext verwendet behandelt wird, die nicht eine Wiederholung ist: dieses Verhalten Perl 5.x übereinstimmt. Zum Beispiel in den Ausdrücken "ab {1", "ab1}" und "a {b} c" werden die geschweiften Klammern alle als Literale behandelt und kein Fehler wird ausgelöst.

+0

Ah, ich sehe, wie das funktioniert. Der Vollständigkeit halber erhalte ich den gleichen Fehler für einen 'boost :: regex :: basic' Typ, selbst wenn die Regex-Zeichenkette'. * \ {' –

+0

ist, hat es funktioniert oder zumindest verstanden? –

+0

Ja, es funktioniert. Ich habe Regex-Objekte für alle 3 Typen erstellt (Basic, Extended, Perl-kompatibel), also würde man scheitern, wenn ein anderer funktioniert. Ich versuche nun, jede Objektkonstruktion separat zu erfassen und dem Benutzer zu berichten, wenn ein Fehler auftritt, während die anderen fortfahren dürfen. Vielen Dank! –

Verwandte Themen