2012-08-08 11 views
9

Używam wsparcia C++ 11 <regex> i chciałbym sprawdzić, czy początek ciągu pasuje do wyrażenia regularnego. [Mogę przełączyć się na Boost, jeśli to pomaga, ale mam wrażenie, że są w zasadzie takie same.]C++ 11 regex: sprawdzanie, czy ciąg zaczyna się od regex

Oczywiście, jeśli mam kontrolę nad faktyczną reprezentacją tekstową wyrażenia, mogę po prostu przykleić ^ na początku z tego jako kotwicy.

Co jednak jeśli po prostu mam obiekt regex (lub basic_regex)? Czy mogę zmodyfikować wyrażenia regularne, które reprezentuje, aby dodać zakotwiczenie? Czy muszę użyć regex_search, uzyskać wynik i sprawdzić, czy zaczyna się od pozycji 0?

+0

Wiele zwykłych ciągów można uważać za wyrażenia regularne. '" abc "' jest także wyrażeniem regularnym, ale pasuje tylko do dokładnego ciągu znaków. – nhahtdh

Odpowiedz

10

Można dodać flagę std::regex_constants::match_continuous podczas korzystania regex_search, na przykład następujące drukuje "1" i "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; 
} 

środki flagi (C++ 11 §28.5.2/1 = Tabela 139):

Wyrażenie odpowiada pod-sekwencji rozpoczynającej się od first.

+3

To, um, ciekawe imię dla flagi, ale dokładnie tego chciałem! Dzięki za pakiet – EvanED

Powiązane problemy