Expresiones regulares en Swift con ejemplos: para principiantes

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: guía completa para principiantes

Las expresiones regulares (regex) son una herramienta poderosa para buscar, reemplazar y validar datos de texto. En Swift, el trabajo con expresiones regulares se implementa a través de la clase NSRegularExpression del framework Foundation. En este artículo aprenderá a crear y aplicar expresiones regulares en aplicaciones para iOS y macOS, analizará ejemplos reales y dominará los conceptos básicos de la sintaxis.



1. Conceptos básicos de la sintaxis de expresiones regulares

Antes de escribir código en Swift, es importante comprender los símbolos y construcciones básicas de regex. Aquí están los elementos clave:

  • . — cualquier carácter (excepto salto de línea)
  • * — 0 o más repeticiones del carácter anterior
  • + — 1 o más repeticiones
  • ? — 0 o 1 repetición (hace opcional el carácter anterior)
  • \\d — cualquier dígito (0-9)
  • \\w — cualquier letra, dígito o guion bajo
  • [abc] — uno de los caracteres a, b o c
  • [^abc] — cualquier carácter excepto a, b, c
  • ^ — inicio de la cadena
  • $ — final de la cadena

Estos símbolos se combinan para crear patrones. Por ejemplo, el patrón ^[A-Za-z]+$ significa: la cadena consiste solo en letras del alfabeto latino de principio a fin.



2. Creación y uso de NSRegularExpression en Swift

En Swift, el trabajo con regex comienza importando Foundation y creando una instancia de NSRegularExpression. Veamos un ejemplo simple: buscar todos los dígitos en una cadena.

import Foundation

let text = "Mi número: 123-456-7890"let pattern = "\\\\d+" // patrón: uno o más dígitos

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

Tenga en cuenta el escape de la barra invertida: en la cadena Swift "\\\\d" corresponde a la expresión regular \\d. La clase NSRegularExpression lanza una excepción si el patrón es inválido, por lo que usamos try-catch.



2.1. Trabajo con NSRange

El método matches(in:range:) devuelve un array de objetos NSTextCheckingResult. Cada resultado contiene un rango (NSRange) de la coincidencia encontrada. Para convertir a Swift Range use el inicializador Range(match.range, in: text).



3. Ejemplos prácticos de expresiones regulares

Veamos tres tareas típicas: validación de email, extracción de URL y reemplazo de texto.



3.1. Validación de dirección de email

Verifiquemos si una cadena coincide con un patrón simple de email (versión simplificada):

func isValidEmail(_ email: String) -> Bool {    let pattern = "^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\\\\.[A-Za-z]{2,}$"    let regex = try? NSRegularExpression(pattern: pattern)    let range = NSRange(location: 0, length: email.utf16.count)    return regex?.firstMatch(in: email, range: range) != nil}

print(isValidEmail("test@example.com")) // trueprint(isValidEmail("invalid-email")) // false

Aquí usamos firstMatch, que devuelve la primera coincidencia. Si no hay coincidencias, devuelve nil.



3.2. Extracción de URL de un texto

Supongamos que tenemos una cadena con varios enlaces. Extraigamos todas las URL:

let text = "Visite el sitio https://pythonlib.ru o escriba a support@pythonlib.ru"let pattern = "https?://[\\\\w./%-]+"

do

Blogs

Book Recommendations