Expresiones regulares en C++: guía completa con ejemplos

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

Expresiones regulares en C++: una poderosa herramienta para trabajar con cadenas

Las expresiones regulares (regex) son un lenguaje formal para buscar y manipular subcadenas en texto basado en patrones. En C++, el soporte para expresiones regulares apareció en el estándar C++11 y se implementa en la biblioteca <regex>. Es una herramienta indispensable para la validación de datos, el análisis de logs, la búsqueda de patrones y el reemplazo de texto.

En este artículo, analizaremos las funciones principales de la biblioteca regex, aprenderemos a crear patrones y veremos ejemplos prácticos con código.



1. Tipos y funciones principales de la biblioteca <regex>

Para trabajar con expresiones regulares en C++, se utilizan tres clases principales:

  • std::regex — representa la propia expresión regular (patrón).
  • std::smatch — contenedor para almacenar los resultados de la búsqueda (para cadenas de tipo std::string).
  • std::cmatch — análogo para cadenas C (const char*).

Funciones clave para aplicar regex:

  • std::regex_match() — verifica si toda la cadena coincide con el patrón.
  • std::regex_search() — busca la primera coincidencia con el patrón en la cadena.
  • std::regex_replace() — reemplaza todas las coincidencias con el texto especificado.


#include <iostream>#include <regex>#include <string>

int main() { std::string text = "Mi número: +7-123-456-78-90"; std::regex pattern(R"(\\+7-\\d{3}-\\d{3}-\\d{2}-\\d{2})");

if (std::regex_search(text, pattern)) { std::cout << "¡Número encontrado!" << std::endl; }

// Extraemos la coincidencia std::smatch match; if (std::regex_search(text, match, pattern)) { std::cout << "Número encontrado: " << match[0] << std::endl; }

return 0;}


2. Sintaxis de las expresiones regulares: metacaracteres y cuantificadores

Los patrones regex en C++ utilizan una sintaxis similar a ECMAScript (por defecto). Estos son los elementos principales:

  • Punto (.) — cualquier carácter individual, excepto el salto de línea.
  • Astérisco (*) — 0 o más repeticiones del carácter anterior.
  • Más (+) — 1 o más repeticiones.
  • Signo de interrogación (?) — 0 o 1 repetición (hace que el carácter sea opcional).
  • Corchetes ([]) — clase de caracteres (por ejemplo, [0-9] — cualquier dígito).
  • Paréntesis (()) — agrupación y captura de subcadenas.
  • Barra vertical (|) — OR lógico.
  • Símbolo ^ — inicio de la cadena.
  • Símbolo $ — final de la cadena.

Ejemplos de cuantificadores:

  • \\d{3} — exactamente 3 dígitos.
  • \\w{2,4} — de 2 a 4 caracteres alfanuméricos.
  • [A-Za-z]+ — una o más letras latinas.


#include <iostream>#include <regex>#include <string>

int main() { std::string email = "user@example.com"; // Patrón simple para email std::regex email_pattern(R"([\\w.+-]+@[\\w-]+\\.[\\w.]+)");

if (std::regex_match(email, email_pattern)) { std::cout << "Email correcto." << std::endl; } else { std::cout << "Email incorrecto." << std::endl; }

// Verificación de número de teléfono std::string phone = "+7 (495) 123-45-67"; std::regex phone_pattern(R"(\\+7\\s?\\(?\\d{3}\\)?\\s?\\d{3}-?\\d{2}-?\\d{2})");

if (std::regex_match(phone, phone_pattern)) { std::cout << "Teléfono correcto." << std::endl; }

return 0;}


3. Extracción de datos usando grupos de captura

Los grupos de captura

Blogs

Book Recommendations