2011-12-23 21 views
5

Decir que tengo un objeto sregex como éste:¿Cómo iterar grupos con nombre en xpressive?

boost::xpressive::sregex::compile("(?P<firstword>\\w+) (?<secondword>\\w+)!"); 

No he podido encontrar ninguna referencia en la documentación Xpressive con respecto a este, a pesar de que apoyan grupos nombrados Xpressive bien.

Sé que es posible iterar a través de grupos, pero ¿cómo puedo acceder al nombre de grupo (si el grupo tiene un nombre)?

Entonces, ¿cómo iteraría a través de los grupos nombrados?

+2

duplicado: http://stackoverflow.com/questions/2718607/cboostregex-iterate-over -las sub-subclases –

+2

¿Cómo es esto un duplicado? La respuesta enlazada ** no ** lo responde, ya que solo cita el código directamente del encabezado (aparte del hecho de que usar ese código sería un simple truco), ni siquiera muestra un ejemplo. ¿Por qué estoy tratando de explicar? Alguien me dirá "eso es totalmente un duplicado, etc, etc, ¡qué chulo!". SO está realmente perdiendo utilidad. Y eso todavía está muy bien, como un caballero. – hiobs

+1

Los duplicados no son sobre respuestas; son sobre preguntas. Su pequeña queja no cambia eso –

Respuesta

4

Suponiendo que tenemos toda la expresión regular que se está trabajando, IIT parece a mi punto de vista que usted está tratando de crear una expresión regular que coincide tanto de la la captura de llamada, por lo que es inútil tratar para iterar sobre la captura nombrada.

Simplemente tiene que probar algo como eso.

std::string str("foo bar"); 
sregex rx = sregex::compile("(?P<firstword>\\w+) (?<secondword>\\w+)!"); 
smatch what; 
if(regex_search(str, what, rx)) 
{ 
    std::cout << "char = " << what["firstword"] << what["secondword"] std::endl; 
} 

Si la expresión regular es parte de un patrón más complejo por qué no usar la captura de llamada estática: http://www.boost.org/doc/libs/1_41_0/doc/html/xpressive/user_s_guide.html#boost_xpressive.user_s_guide.named_captures.static_named_captures

+0

Desafortunadamente, parece que usar 'operator []' es actualmente la única forma de acceder a los grupos nombrados. Desearía que xpressive hiciera accesible el nombre del grupo a través de las funciones miembro ... – hiobs

Cuestiones relacionadas