Reguläre Ausdrücke in Kotlin: Vollständige Anleitung mit Beispielen

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

Reguläre Ausdrücke in Kotlin: Vollständiger Leitfaden mit Beispielen



Reguläre Ausdrücke (regex) sind ein mächtiges Werkzeug zum Suchen, Extrahieren und Ersetzen von Text nach einem Muster. In Kotlin wird die Arbeit mit regulären Ausdrücken über die Klasse Regex implementiert, die eine praktische API und vollständige Kompatibilität mit der Java-Implementierung java.util.regex.Pattern bietet. In diesem Artikel werden wir alle Aspekte der Verwendung regulärer Ausdrücke in Kotlin mit anschaulichen Beispielen behandeln.



1. Erstellung und grundlegende Verwendung von Regex in Kotlin



In Kotlin gibt es zwei Hauptmethoden, um einen regulären Ausdruck zu erstellen:



  • Konstruktor der Klasse Regex — Sie übergeben eine Zeichenkette mit dem Muster.
  • Erweiterungsmethode .toRegex() — wird auf einer Zeichenkette aufgerufen.


Beispiele für die Erstellung:



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

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

// Mit Flags (Groß-/Kleinschreibung ignorieren)val regex3 = Regex("hello", RegexOption.IGNORE_CASE)

// Mehrzeilenmodusval regex4 = Regex("^start", RegexOption.MULTILINE)


Beachten Sie: In Kotlin wird, wie in Java, zum Escapen des Backslashs ein doppelter Backslash \\\\ verwendet. Wenn Sie \\d schreiben möchten, müssen Sie "\\\\d" schreiben.



2. Hauptfunktionen von Regex: Prüfung, Suche, Ersetzung



Die Klasse Regex bietet mehrere Schlüsselfunktionen für die Arbeit mit Zeichenketten.



2.1. Prüfung auf vollständige Übereinstimmung — matches()



Die Funktion matches() gibt true zurück, wenn die gesamte Zeichenkette vollständig dem Muster entspricht.



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. Suche nach der ersten Übereinstimmung — find()



Gibt die erste gefundene Übereinstimmung als Objekt MatchResult? zurück (oder null, wenn nichts gefunden wurde).



val text = "Mein Telefon: 123-45-6789 und noch 987-65-4321"val phoneRegex = Regex("\\\\d{3}-\\\\d{2}-\\\\d{4}")

val firstMatch = phoneRegex.find(text)if (firstMatch != null) { println("Telefon gefunden: ${firstMatch.value}") // Telefon gefunden: 123-45-6789 println("Start: ${firstMatch.range.first}") // Start: 13}


2.3. Suche nach allen Übereinstimmungen — findAll()



Gibt eine Sequenz Sequence<MatchResult> aller nicht überlappenden Übereinstimmungen zurück.



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

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


2.4. Ersetzung nach Muster — replace()



Die Funktion replace() ersetzt alle gefundenen Übereinstimmungen durch die angegebene Zeichenkette oder das Ergebnis eines Lambda-Ausdrucks.



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

// Einfache Ersetzungval masked = emailRegex.replace(text, "[EMAIL VERSTECKT]")println(masked) // Meine E-Mail: [EMAIL VERSTECKT] und [EMAIL VERSTECKT]

// Ersetzung mit Lambda (dynamisch)val replaced = emailRegex.replace(text) { match -> val local = match.value.split("@")[0] "${local.first()}***@***"}println(replaced) // Meine E-Mail: j***@*** und s***@***


2.5. Aufteilen einer Zeichenkette — split()



Teilt eine Zeichenkette anhand der Übereinstimmungen mit dem regulären Ausdruck auf.



val text = "Apfel,Birne;Banane|Orange"val separators = Regex("[,;|]")

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

Blogs

Buchempfehlungen