Reguläre Ausdrücke in Kotlin: Vollständiger Leitfaden 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: Von den Grundlagen bis zu fortgeschrittenen Techniken



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 umfangreiche API für alle Standardoperationen bereitstellt. In diesem Artikel werden wir die Syntax, die wichtigsten Funktionen und praktische Beispiele für die Verwendung regulärer Ausdrücke in Kotlin behandeln.



1. Erstellung und grundlegende Syntax von Regex in Kotlin



In Kotlin wird ein regulärer Ausdruck mit der Klasse Regex oder über die Erweiterung .toRegex() für Strings erstellt. Alle Standard-Metazeichen und Quantoren werden unterstützt.



Möglichkeiten zur Erstellung von Regex:

// Möglichkeit 1: über den Konstruktorval regex = Regex("\\\\d{3}-\\\\d{2}-\\\\d{4}")

// Möglichkeit 2: über toRegex()val pattern = "[a-z]+@[a-z]+\\\\.[a-z]+".toRegex()

// Möglichkeit 3: mit Optionen (Groß-/Kleinschreibung ignorieren)val caseInsensitive = Regex("kotlin", RegexOption.IGNORE_CASE)


Wichtige Metazeichen und Quantoren:

  • . — ein beliebiges Zeichen (außer Zeilenumbruch)
  • \\d — eine Ziffer (0-9)
  • \\w — ein Buchstabe, eine Ziffer oder ein Unterstrich
  • \\s — ein Leerzeichen
  • ^ — Anfang der Zeichenkette
  • $ — Ende der Zeichenkette
  • * — 0 oder mehr Wiederholungen
  • + — 1 oder mehr Wiederholungen
  • ? — 0 oder 1 Wiederholung
  • {n,m} — von n bis m Wiederholungen


2. Grundlegende Operationen: Suchen, Prüfen und Extrahieren



Die Klasse Regex bietet mehrere Methoden für die Arbeit mit Text. Betrachten wir die wichtigsten davon.



Übereinstimmungsprüfung (matches)

Die Methode matches() prüft, ob die gesamte Zeichenkette vollständig dem Muster entspricht:

val phonePattern = Regex("\\\\+7\\\\d{10}")println(phonePattern.matches("+79261234567")) // trueprintln(phonePattern.matches("+7926123456")) // false (9 Ziffern statt 10)


Suche nach der ersten Übereinstimmung (find)

Die Methode find() gibt die erste Übereinstimmung als Objekt MatchResult? zurück:

val text = "Kontakte: email@test.com und support@domain.org"val emailRegex = "[\\\\w.]+@[\\\\w.]+\\\\.[a-z]+".toRegex()val match = emailRegex.find(text)println(match?.value) // email@test.comprintln(match?.range) // 10..23 (Start- und Endindizes)


Suche nach allen Übereinstimmungen (findAll)

Verwenden Sie findAll(), um alle Übereinstimmungen zu erhalten. Diese Methode gibt eine Sequenz Sequence<MatchResult> zurück:

val allMatches = emailRegex.findAll(text)allMatches.forEach { match ->    println("Gefunden: ${match.value} an Position ${match.range.first}")}// Ausgabe:// Gefunden: email@test.com an Position 10// Gefunden: support@domain.org an Position 28


Prüfung auf Vorhandensein (containsMatchIn)

Die Methode containsMatchIn() gibt einen Boolean zurück — ob mindestens eine Übereinstimmung vorhanden ist:

val hasEmail = emailRegex.containsMatchIn(text)println(hasEmail) // true


3. Ersetzen und Split mit Regex



Reguläre Ausdrücke eignen sich hervorragend zum Ersetzen von Teilen einer Zeichenkette und zum Teilen von Text.



Ersetzen der ersten Übereinstimmung (replaceFirst)

val original = "ID: 12345, Code: 67890"val digitRegex = "\\\\d+".toRegex()val masked = digitRegex.replaceFirst(original, "***")println(masked) // ID: ***, Code: 67890


Ersetzen aller Übereinstimmungen (replace)

val censored = digitRegex.replace(original, "***")println(censored) // ID: ***, Code: ***


Ersetzen mit Lambda

Sie können ein Lambda übergeben, das für jede Übereinstimmung aufgerufen wird:

Blogs

Buchempfehlungen