Estoy escribiendo un pequeño programa de línea de comandos que pide al usuario polinomios en la forma ax^2 + bx^1 + cx^0. Voy a analizar los datos más adelante, pero por ahora solo estoy tratando de ver si puedo hacer coincidir el polinomio con la expresión regular (\+|-|^)(\d*)x\^([0-9*]*)
Mi problema es que no coincide con varios términos en el polinomio ingresado por el usuario a menos que cambie a ((\+|-|^)(\d*)x\^([0-9*]*))*
(la diferencia es que toda la expresión está agrupada y tiene un asterisco al final). La primera expresión funciona si escribo algo como "4x^2
" pero no "4x^2+3x^1+2x^0
", ya que no se comprueba varias veces.¿Por qué Boost.Regex no encuentra coincidencias múltiples en una cadena?
Mi pregunta es, ¿por qué no Boost.Regex's regex_match()
encuentra varias coincidencias dentro de la misma cadena? Lo hace en el editor de expresiones regulares que utilicé (Expresso) pero no en el código C++ real. ¿Se supone que debería ser así?
Avíseme si algo no tiene sentido e intentaré aclararlo. Gracias por la ayuda.
Edit1: Aquí está mi código (estoy siguiendo el tutorial aquí: http://onlamp.com/pub/a/onlamp/2006/04/06/boostregex.html?page=3)
int main()
{
string polynomial;
cmatch matches; // matches
regex re("((\\+|-|^)(\\d*)x\\^([0-9*]*))*");
cout << "Please enter your polynomials in the form ax^2+bx^1+cx^0." << endl;
cout << "Polynomial:";
getline(cin, polynomial);
if(regex_match(polynomial.c_str(), matches, re))
{
for(int i = 0; i < matches.size(); i++)
{
string match(matches[i].first, matches[i].second);
cout << "\tmatches[" << i << "] = " << match << endl;
}
}
system("PAUSE");
return 0;
}
He estado tratando de modificar la expresión regular, pero no ha estado trabajando . Coincidirá, pero la única información en la matriz de "coincidencias" es el material de la última subexpresión.Por ejemplo, si ingreso "4x^2 + 3x^1", mi salida dice: coincidencias [0] = 4x^2 + 3x^1 coincidencias [1] = + 3x^1 coincidencias [2] = + coincidencias [3 ] = 3 coincidencias [4] = 1 Solo obtengo el último término del polinomio; Necesito poder analizar todo el asunto. –
@Zeebo: quizás sea útil la versión que he editado en la respuesta. –
Lo siento, debería haber sido más claro. Solo necesito los coeficientes y los exponentes. Intento escribir un programa para realizar una división sintética, así que todo lo que necesito saber son los coeficientes (si son positivos o negativos), cuántos términos hay y los exponentes (porque 0x^n debe ser insertado si falta un término; por ejemplo, 4x^4 + 7x^2 necesita ser 4x^2 + 0x^3 + 7x^2.) –