smatch es una instanciación de la plantilla de clase match_results para coincidencias en objetos de string.
Funciones que pueden llamarse usando smatch:
str(), position() y length() funciones miembro del objeto match_results pueden llamarse para obtener el texto que coincidió, o la posición inicial y la longitud de la coincidencia en relación con el string de asunto.
- Llame a estas funciones miembro sin un parámetro o con 0 como parámetro para obtener la coincidencia general de expresiones regulares.
- Llámelos pasando 1 o más para obtener la coincidencia de un grupo de captura en particular.
- La función miembro size() indica el número de grupos de captura más uno para la coincidencia general.
- Por lo tanto, puede pasar un valor de hasta size()-1 a las otras tres funciones miembro (str(), position(), length()).
¿Qué es el grupo de captura?
Ejemplos:
Example-1: Suppose you create a regex object like : regex re("(geeks)(.*)") Here no of capturing group is = 2 [ one is "geeks" and second is any character after "geeks" ]. Example-2: regex re("a(b)c") Here no of capturing group is = 1[ 'b' is the capturing group]. whatever within '(' and ')' braces is treated as capturing group.
A continuación se muestra el programa para mostrar el funcionamiento de smatch:
#include <bits/stdc++.h> using namespace std; int main() { string sp("geeksforgeeks"); regex re("(geeks)(.*)"); // flag type for determining the matching behavior // && here it is for matches on strings. smatch match; // we can use member function on match // to extract the matched pattern. if (regex_search(sp, match, re) == true) { // The size() member function indicates the // number of capturing groups plus one for the overall match // match size = Number of capturing group + 1 // (.*) which "forgeeks" ). cout << "Match size = " << match.size() << endl; // Capturing group is index from 0 to match_size -1 // .....here 0 to 2 // pattern at index 0 is the overall match "geeksforgeeks" // pattern at index 1 is the first capturing group "geeks" // pattern at index 2 is the 2nd capturing group "forgeeks" cout << "Whole match : " << match.str(0) << endl; cout << "First capturing group is '" << match.str(1) << "' which is captured at index " << match.position(1) << endl; cout << "Second capturing group is '" << match.str(2) << "' which is captured at index " << match.position(2) << endl; } else { cout << "No match is found" << endl; } return 0; }
Producción:
Match size = 3 Whole match : geeksforgeeks First capturing group is 'geeks' which is captured at index 0 Second capturing group is 'forgeeks' which is captured at index 5
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