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