Estoy intentando implementar un algoritmo de agrupamiento de texto. El algoritmo agrupa líneas similares de texto en bruto reemplazándolas por expresiones regulares y agrega el número de patrones que coinciden con cada expresión regular para proporcionar un resumen ordenado del texto de entrada en lugar de mostrar patrones repetitivos del texto de entrada. En este intento, me encontré con la necesidad de encontrar si una expresión regular cubre a otra.Comprueba si una expresión regular cubre otra expresión regular
Supongamos que nos interesa única acerca de las expresiones regulares con '*' y tarjetas '+' salvajes es decir, '*' significa cero o más ocurrencias de un alfabeto, y '+' significa 1 o más ocurrencias de un alfabeto. También suponga que el conjunto de caracteres es ASCII.
Por ejemplo:
1. AB covers AB
This is straightforward.
2. ABC* covers ABC
Because ABC* can generate: ABC, ABCC, ABCCC etc.
3. A*B+C* covers AB+C*
Because A*B+C* can generate ABBC, AABBC, AABBCC etc. which covers
all strings generated by AB+C*.
4. A+M+BC* covers AMM+B+C+M+BC*
Similar to case [3] above.
Básicamente estoy buscando una implementación eficiente del método siguiente, que indica si strA (puede contener una expresión regular) fundas para strB (puede contener una expresión regular). Tenga en cuenta que también debería haber una forma de escapar de los caracteres regex '*' y '+' en las cadenas de entrada strA y strB.
método de firma en C++:
bool isParentRegex(const string& strA, const string& strB)
Mi pensamiento es que se requiere un enfoque recursivo para la aplicación y puede ser un poco complicado. Pero tengo curiosidad por saber si puedo reutilizar las implementaciones existentes en lugar de reinventar la rueda o si hay otras formas directas de hacerlo.
¡Muy buena pregunta! –
posible duplicado de [Regex: determine si dos expresiones regulares podrían coincidir para la misma entrada] (http://stackoverflow.com/questions/3410256/regex-determine-if-two-regular-expressions-could-match-for -the-same-imput) –
Como la mayoría de las cosas, esto sería más fácil en Perl. :-) – ruakh