2012-08-08 23 views
9

Estoy usando el soporte de C++ 11 <regex>, y me gustaría comprobar si el comienzo de una cadena coincide con una expresión regular. [Puedo cambiar a Boost si eso ayuda, pero mi impresión es que son básicamente los mismos.]C++ 11 regex: comprobando si la cadena comienza con regex

Obviamente, si tengo control de la representación textual real de la expresión, puedo simplemente poner un ^ al principio de ella como un ancla.

Sin embargo, ¿qué ocurre si solo tengo un objeto regex (o basic_regex)? ¿Puedo modificar la expresión regular que representa para agregar el ancla? ¿O debo usar regex_search, obtener el resultado y verificar si comienza en la posición 0?

+0

Muchas cadenas ordinarias se pueden considerar como expresiones regulares. '" abc "' también es una expresión regular, pero solo coincide con la cadena exacta. – nhahtdh

Respuesta

10

Se podría añadir la bandera std::regex_constants::match_continuous cuando se utiliza regex_search, por ejemplo, las siguientes impresiones "1" y "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; 
} 

Los medios bandera (C++ 11 §28.5.2/1 = Tabla 139):

La expresión solo coincidirá con una subsecuencia que comienza en first.

+3

Es un, um, nombre interesante para la bandera, ¡pero eso es exactamente lo que quería! Gracias un paquete – EvanED