Expresiones regulares en Swift: 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 Swift: una potente herramienta para trabajar con texto

Las expresiones regulares (regex) son una herramienta indispensable para los desarrolladores de iOS y macOS. Permiten realizar búsquedas complejas, reemplazos y validación de datos textuales mediante patrones compactos. En Swift, el trabajo con expresiones regulares se implementa a través de la clase NSRegularExpression del framework Foundation. En este artículo analizaremos todos los aspectos del uso de regex en Swift: desde la sintaxis básica hasta técnicas avanzadas, con ejemplos prácticos para aplicaciones iOS y macOS.



Fundamentos de NSRegularExpression en Swift

Para trabajar con expresiones regulares en Swift se utiliza la clase NSRegularExpression. Proporciona potentes métodos para buscar, reemplazar y extraer datos de cadenas. Veamos la sintaxis básica de inicialización:



import Foundation

let pattern = "\\\\d{3}-\\\\d{2}-\\\\d{4}" // Patrón para SSNlet text = "Mi SSN: 123-45-6789"

do { let regex = try NSRegularExpression(pattern: pattern) let results = regex.matches(in: text, range: NSRange(text.startIndex..., in: text)) for match in results { let range = Range(match.range, in: text)! print("Encontrado: \\(text[range])") }} catch { print("Error en la expresión regular: \\(error.localizedDescription)")}


Tenga en cuenta el escape de la barra invertida en las cadenas de Swift. Por cada barra invertida en el patrón, debe colocar dos (\\\\d en lugar de \\d).



Creación y configuración de la expresión regular

El constructor NSRegularExpression acepta un parámetro opcional options que permite configurar el comportamiento del regex:



  • .caseInsensitive — ignorar mayúsculas y minúsculas
  • .dotMatchesLineSeparators — el punto coincide con caracteres de salto de línea
  • .anchorsMatchLines — los anclajes ^ y $ funcionan para cada línea
  • .useUnixLineSeparators — usar solo como separador de líneas


let regex = try NSRegularExpression(    pattern: "swift",    options: [.caseInsensitive])// Ahora el patrón encontrará "Swift", "SWIFT", "swift", etc.


Búsqueda y extracción de datos con regex

Una de las principales tareas de las expresiones regulares es buscar subcadenas que coincidan con el patrón. En Swift esto se hace mediante el método matches(in:options:range:).



Búsqueda de todas las coincidencias

let text = "Contactos: email@example.com, support@test.org, admin@site.com"let emailPattern = "[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\\\\.[A-Za-z]{2,}"

let regex = try NSRegularExpression(pattern: emailPattern)let matches = regex.matches(in: text, range: NSRange(text.startIndex..., in: text))

print("Emails encontrados: \\(matches.count)")for match in matches { if let range = Range(match.range, in: text) { print(String(text[range])) }}// Salida:// Emails encontrados: 3// email@example.com// support@test.org// admin@site.com


Búsqueda con captura de grupos

Los grupos entre paréntesis permiten extraer partes de la coincidencia. Esto es especialmente útil para analizar datos estructurados:



let logLine = "2024-01-15 14:30:22 [ERROR] No se pudo conectar al servidor"let logPattern = "(\\\\d{4}-\\\\d{2}-\\\\d{2}) (\\\\d{2}:\\\\d{2}:\\\\d{2}) \\\\[(\\\\w+)\\\\] (.+)"

let regex = try NSRegularExpression(pattern: logPattern)if let match = regex.firstMatch(in: logLine, range: NSRange(logLine.startIndex..., in: logLine)) { let dateRange = Range(match.range(at: 1), in: logLine)! let timeRange = Range(match.range(at: 2), in: logLine)! let levelRange = Range(match.range(at: 3), in: logLine)! let messageRange = Range(match.range(at: 4), in: logLine)! print("Fecha: \\(logLine[dateRange])") print("Hora: \\(logL

Blogs

Book Recommendations