2011-10-08 9 views
6

He leído a través n1429 con la sección¿Hay un match_partial en C++ 11 Regular Expressions?

La algoritmos regex_match y regex_search apoyo tanto una característica que normalmente no se ve en las bibliotecas de expresiones regulares: una coincidencia parcial. Cuando la bandera std::regex_constants::match_partial se establece en los indicadores pasados ​​al algoritmo, se puede devolver un resultado de verdadero si coinciden uno o más caracteres, y la máquina de estados luego alcanza el final de la secuencia de caracteres mientras todavía hay estados para ser emparejado [...]

Pero no encuentro rastros de esa característica en el FCD, ni en los encabezados del gcc-4.7.0 actual. También busqué una revisión de n1429 pero de nuevo no encontré nada. Sé que la base de la propuesta tenía sus orígenes en Boost y la convirtió en TR1. Pero no sé cuándo desapareció match_partial.

¿La función de coincidencia parcial es todavía en C++ 11? Tal vez con un nombre diferente?

Respuesta

8

Parece la bandera match_partial se elimina en N1723 "Proposed Resolutions to Library TR Issues" (2004 Oct) como una solución a N1507 "Errata to the Regular Expression Proposal":

7,34 Significado de la bandera match_partial

Quitar match_partial.

La justificación de acuerdo con N1837 "Library Extension Technical Report  Issues List" es que:

El GDP de acuerdo en que esta es una característica útil y aplicable, pero hemos intentado en varias ocasiones y no pudo darle una especificación adecuada. Esperamos que sea posible agregar esta característica en una versión futura.

Supongo que no hay reemplazo en C++ 11. Todavía puede usar Boost.Regex (de donde viene std::regex), que admite partial match.

+0

Gracias. Busqué un reemplazo de todo el N1429, no audaces revisiones. – towi

+1

¡Me he estado golpeando la cabeza tratando de descubrir por qué no podría igualar nada! Pensé que este sería el comportamiento predeterminado en cualquier implementación. Gracias por esto. – Kenneth