Programa para encontrar todas las coincidencias de una expresión regular en una string

Requisito previo: smatch | Regex (expresiones regulares) en C++

Dada una expresión regular, la tarea es encontrar todas las coincidencias de expresiones regulares en una string.

  • Sin usar iterador:

    // C++ program to find all the matches
    #include <bits/stdc++.h>
    using namespace std;
    int main()
    {
        string subject("My GeeksforGeeks is my " 
                        "GeeksforGeeks none of your GeeksforGeeks");
      
        // Template instantiations for
        // extracting the matching pattern.
        smatch match;
        regex r("GeeksforGeeks");
        int i = 1;
        while (regex_search(subject, match, r)) {
            cout << "\nMatched string is " << match.str(0) << endl
                 << "and it is found at position " 
                 << match.position(0)<<endl; 
            i++;
      
            // suffix to find the rest of the string.
            subject = match.suffix().str();
        }
        return 0;
    }
    Producción:

    Matched string is GeeksforGeeks
    and it is found at position 3
    
    Matched string is GeeksforGeeks
    and it is found at position 7
    
    Matched string is GeeksforGeeks
    and it is found at position 14
    

    Nota: El código anterior funciona perfectamente bien, pero el problema es que se perderá la string de entrada.

  • Uso del iterador:
    el objeto se puede construir llamando al constructor con tres parámetros: un iterador de string que indica la posición inicial de la búsqueda, un iterador de string que indica la posición final de la búsqueda y el objeto regex. Construya otro objeto iterador utilizando el constructor predeterminado para obtener un iterador de fin de secuencia.

    #include <bits/stdc++.h>
    using namespace std;
    int main()
    {
        string subject("geeksforgeeksabcdefghg"
                       "eeksforgeeksabcdgeeksforgeeks");
      
        // regex object.
        regex re("geeks(for)geeks");
      
        // finding all the match.
        for (sregex_iterator it = sregex_iterator(subject.begin(), subject.end(), re);
             it != sregex_iterator(); it++) {
            smatch match;
            match = *it;
            cout << "\nMatched  string is = " << match.str(0)
                 << "\nand it is found at position "
                 << match.position(0) << endl;
            cout << "Capture " << match.str(1)
                 << " at position " << match.position(1) << endl;
        }
        return 0;
    }
    Producción:

    Matched  string is = geeksforgeeks
    and it is found at position 0
    Capture for at position 5
    
    Matched  string is = geeksforgeeks
    and it is found at position 21
    Capture for at position 26
    
    Matched  string is = geeksforgeeks
    and it is found at position 38
    Capture for at position 43
    

Publicación traducida automáticamente

Artículo escrito por vivek kumar 9 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *