Expresiones regulares en Kotlin: 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 Kotlin: guía completa con ejemplos



Las expresiones regulares (regex) son una herramienta poderosa para buscar, extraer y reemplazar texto según un patrón. En Kotlin, el trabajo con expresiones regulares se implementa a través de la clase Regex, que proporciona una API conveniente y compatibilidad total con la implementación de Java java.util.regex.Pattern. En este artículo, analizaremos todos los aspectos del uso de expresiones regulares en Kotlin con ejemplos ilustrativos.



1. Creación y uso básico de Regex en Kotlin



En Kotlin hay dos formas principales de crear una expresión regular:



  • Constructor de la clase Regex — pasas una cadena con el patrón.
  • Método de extensión .toRegex() — se llama sobre una cadena.


Ejemplos de creación:



// Forma 1: constructorval regex1 = Regex("\\\\d{3}-\\\\d{2}-\\\\d{4}")

// Forma 2: toRegex()val regex2 = "\\\\d{3}-\\\\d{2}-\\\\d{4}".toRegex()

// Con banderas (búsqueda sin distinción de mayúsculas/minúsculas)val regex3 = Regex("hello", RegexOption.IGNORE_CASE)

// Modo multilíneaval regex4 = Regex("^start", RegexOption.MULTILINE)


Ten en cuenta: en Kotlin, al igual que en Java, para escapar la barra invertida se usa doble barra \\\\. Si escribes \\d — debes escribir "\\\\d".



2. Funciones principales de Regex: verificación, búsqueda, reemplazo



La clase Regex proporciona varias funciones clave para trabajar con cadenas.



2.1. Verificación de coincidencia completa — matches()



La función matches() devuelve true si toda la cadena coincide completamente con el patrón.



val emailRegex = Regex("[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\\\.[a-zA-Z]{2,}")

val email1 = "user@example.com"val email2 = "invalid-email"

println(emailRegex.matches(email1)) // trueprintln(emailRegex.matches(email2)) // false


2.2. Búsqueda de la primera coincidencia — find()



Devuelve la primera coincidencia encontrada como un objeto MatchResult? (o null si no se encuentra nada).



val text = "Mi teléfono: 123-45-6789 y también 987-65-4321"val phoneRegex = Regex("\\\\d{3}-\\\\d{2}-\\\\d{4}")

val firstMatch = phoneRegex.find(text)if (firstMatch != null) { println("Teléfono encontrado: ${firstMatch.value}") // Teléfono encontrado: 123-45-6789 println("Inicio: ${firstMatch.range.first}") // Inicio: 13}


2.3. Búsqueda de todas las coincidencias — findAll()



Devuelve una secuencia Sequence<MatchResult> de todas las coincidencias no superpuestas.



val text = "Precios: 100 rub., 250 rub., 50 rub."val priceRegex = Regex("\\\\d+")

val prices = priceRegex.findAll(text)prices.forEach { match -> println("Precio: ${match.value}")}// Salida:// Precio: 100// Precio: 250// Precio: 50


2.4. Reemplazo según patrón — replace()



La función replace() reemplaza todas las coincidencias encontradas con la cadena especificada o el resultado de una expresión lambda.



val text = "Mi email: john@mail.com y support@site.org"val emailRegex = Regex("[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\\\.[a-zA-Z]{2,}")

// Reemplazo simpleval masked = emailRegex.replace(text, "[EMAIL OCULTO]")println(masked) // Mi email: [EMAIL OCULTO] y [EMAIL OCULTO]

// Reemplazo con lambda (dinámico)val replaced = emailRegex.replace(text) { match -> val local = match.value.split("@")[0] "${local.first()}***@***"}println(replaced) // Mi email: j***@*** y s***@***


2.5. División de cadena — split()



Divide la cadena según las coincidencias con la expresión regular.



val text = "manzana,pera;plátano|naranja"val separators = Regex("[,;|]")

val fruits = separators.split(text)println(fru

Blogs

Book Recommendations