martes, 6 de abril de 2010

Expresiones regular en C++ con boost

La mayoría lenguajes de programación modernos proporcionan la posibilidad de usar expresiones regulares de forma nativa desde el propio lenguaje, sin embargo, en C++ es necesario recurrir a alguna librería como Boost.Regex.

Boost.Regex ofrece la mayoría de funciones comunes de las expresiones regulares.

#include <iostream>
#include <string>
#include <boost/regex.hpp>

int main(){
std::string s = "BEGIN->Cadena_entre_delimitadores<-END";
std::string s2 = "Cadena de texto con 3 numeros para sustituir 1, 4 por incognitas";
boost::regex r("BEGIN->(\\w+)<-END");
boost::regex r2("\\d");
boost::smatch result;

if (boost::regex_search(s, result, r)){
for(int i=0; i<result.size(); i++){
std::cout << "Ocurrencia n " << i+1 << ": "<< result[i] << std::endl;
}
}
else{
std::cout << "Ninguna coincidencia" << std::endl;
}

std::cout << "---" << std::endl;
std::string number("X");
std::cout << "Cadena modificada con una expresion regular: ";
std::cout << boost::regex_replace(s2, r2, number) << std::endl;

}

Con regex_search se pueden encontrar coincidencias de una expresión regular r dentro de una cadena s. Como resultado también tendrá en cuenta los grupos de captura.

Con regex_replace se pueden hacer sustituciones, cambiando las ocurrencias encontradas en la cadena s2 según el patrón r2, sustituyéndolas por number.

Papra compilar es necesario incluir tanto los headers como la librería correspondiente, en mi caso.

g++ -lboost_regex-mt -I/opt/local/include/ -L/opt/local/lib/ regex.cpp -o regex

0 comentarios: