es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Expresión regular que no acepta subcadenas de más de dos “b”.

Necesito una expresión regular que acepte todas las cadenas que consistan solo de los caracteres a y b, excepto aquellas que tengan más de dos ‘b’ consecutivas.

Por ejemplo, las siguientes no deberían coincidir:

abb
ababbb
bba
bbbaa
bbb
bb

Creé esto, pero no está funcionando:

[a-b]+b{2,}[a-b]*

Aquí está mi código:

“`cpp
int main() {
string input;
regex validator_regex(“\b(?:b(?:a+b?)*|(?:a+b?)+)\b”);

cout << "Hola," << endl;
while(regex_match(input,validator_regex)==false){
    cout << "Ingrese su opción de expresión regular: " << endl;
    cin>>input;
    if(regex_match(input,validator_regex)==false)
        cout<<input+" no="" es="" una="" entrada=""></input+"><endl; else=""></endl;><input+" es=""></input+"><endl;
}

}
}="" }=""></endl;
}
}
>

Tags:  ,

Answer

  1. Avatar for davy.ai

    Expresión regular para cadenas compuestas de ‘a’ y ‘b’ con restricción en ‘b’

    Para aceptar todas las cadenas compuestas solo por los caracteres ‘a’ y ‘b’, excepto aquellas con más de dos ‘b’ seguidas, se puede utilizar la siguiente expresión regular:

    ^(a|bb|b?a)+$
    

    Esta expresión regular hará coincidir cualquier cadena que comience con una ‘a’ o dos ‘b’ juntas, seguida de cualquier combinación de ‘a’ y ‘b’ sin que haya más de dos ‘b’ seguidas.

    Así es como funciona:

    • ^ – hace coincidir el inicio de la cadena
    • (a|bb|b?a)+ – hace coincidir cualquier combinación de ‘a’ y ‘b’ sin que haya más de dos ‘b’ seguidas. Permite una ‘a’, ‘bb’ o ‘ba’ al inicio y luego cualquier secuencia de ‘a’ o ‘ba’
    • $ – hace coincidir el final de la cadena

    Por lo tanto, la expresión regular hará coincidir cadenas como ‘a’, ‘aa’, ‘b’, ‘ba’, ‘bab’, ‘aba’, ‘aabaa’, ‘baba’, pero no hará coincidir cadenas como ‘abb’, ‘abbbaa’, ‘bbbab’.

    Tu código tiene una expresión regular que se acerca a la respuesta, pero le faltan algunos caracteres. Además, la función principal está incompleta y no se compilará tal como está. Aquí está el código corregido:

    #include <iostream>
    #include <regex>
    #include <string>
    
    using namespace std;
    
    int main() {
        string input;
        regex validator_regex("^(a|bb|b?a)+$");
    
        cout << "Hola," << endl;
        while(true){
            cout << "Por favor ingresa tu cadena: ";
            cin >> input;
            if(regex_match(input,validator_regex)){
                cout << input << " es una entrada válida" << endl;
                break;
            } 
            cout << input << " no es una entrada válida" << endl;
        }
        return 0;
    }
    

    Este código solicita al usuario que ingrese una cadena y le aplica la expresión regular. Si la cadena coincide con la expresión regular, imprime que es una entrada válida y sale del bucle, de lo contrario, continúa solicitando entradas hasta que se ingrese una cadena válida.

Comments are closed.