2010-12-21 8 views
12

¿Puedo obtener la cadena con expresión regular de std::regex? ¿O debería guardarlo en otro lugar si quiero usarlo más tarde?Cómo obtener una cadena con patrón de std :: regex en VC++ 2010

En alza que usted puede hacer esto:

boost::regex reg("pattern"); 
string p = reg.str(); 

o utilizar < < operador

cout << reg; imprimirá patrón.

pero en std::regex no hay str() u operador < <. ¿Debo guardar mi cadena en otro lugar o simplemente no puedo encontrarla?

En el depurador puedo ver lo que hay en std::regex.

+0

Por favor, edite esta pregunta, dudo mucho que dado '' patrón "' imprima 'aaa'. – Motti

Respuesta

8

Yo miraba en N3225, sección 28.4 (cabecera <regex> sinopsis) y, de hecho, la plantilla basic_regex no tiene ninguna función miembro str, y no hay operator<< proporcionado.

El párrafo 28.8/2 proporciona un poco de conocimiento en esto:

objetos de tipo especialización de basic_regex son responsables de la conversión de la secuencia de charT objetos para una representación interna. No se especifica qué forma toma esta representación , ni cómo se accede a ella a través de los algoritmos que operan en expresiones regulares .

Lo que entiendo es que los mandatos estándar que basic_regex puede construirse a partir const charT * pero no requiere la puesta en práctica de mantener esta cadena.

+0

¿Por qué C++ hace que sea tan difícil ... – user1633272

4

The MSDN docs parecen mostrar que no hay una forma públicamente accesible de recuperar el patrón de expresiones regulares de un objeto construido, por lo que yo diría que usted necesita guardar la cadena usted mismo.

Cuestiones relacionadas