2012-08-08 3 views
9

Ich verwende C++ 11 <regex> Unterstützung, und möchte überprüfen, ob der Anfang einer Zeichenfolge mit einem regulären Ausdruck übereinstimmt. [Ich kann zu Boost wechseln, wenn das hilft, aber mein Eindruck ist, dass sie im Grunde gleich sind.]C++ 11 Regex: Überprüfung, ob String mit Regex

Offensichtlich, wenn ich Kontrolle über die tatsächliche textuelle Darstellung des Ausdrucks habe, kann ich einfach eine ^ am Anfang davon als Anker.

Was aber, wenn ich nur ein regex (oder basic_regex) Objekt habe? Kann ich den regulären Ausdruck, den er darstellt, ändern, um den Anker hinzuzufügen? Oder muss ich regex_search verwenden, das Ergebnis erhalten und prüfen, ob es an Position 0 beginnt?

+0

Viele normale Zeichenfolge kann als Regex betrachtet werden. '" abc "' ist auch eine Regex, aber passt nur zur exakten Zeichenfolge. – nhahtdh

Antwort

10

Sie konnten die std::regex_constants::match_continuous Flag hinzufügen, wenn regex_search verwenden, beispielsweise die folgenden Drucke "1" und "0":

#include <regex> 
#include <string> 

int main() 
{ 
    std::regex rx ("\\d+"); 

    printf("%d\n", std::regex_search("12345abc1234", rx, 
            std::regex_constants::match_continuous)); 
    printf("%d\n", std::regex_search("abc12345", rx, 
            std::regex_constants::match_continuous)); 
    return 0; 
} 

Die Markierungsmittel (C++ 11 §28.5.2/1 = 139 Tabelle):

Der Ausdruck soll eine Untersequenz nur übereinstimmen, die bei first beginnt.

+3

Das ist ein interessanter Name für die Flagge, aber genau das wollte ich! Danke ein Bündel – EvanED