Reguläre Ausdrücke in Rust: Vollständiger Leitfaden für Anfänger

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

Einführung in reguläre Ausdrücke in Rust

\n\n

Reguläre Ausdrücke (regex) sind ein leistungsstarkes Werkzeug zum Suchen, Extrahieren und Ersetzen von Text nach einem bestimmten Muster. In Rust wird für die Arbeit mit regulären Ausdrücken die Crate regex verwendet – eine der beliebtesten und leistungsfähigsten Bibliotheken des Ökosystems. In diesem Artikel behandeln wir die Grundlagen der Arbeit mit regex in Rust, von der Installation bis zu praktischen Beispielen.

\n\n

Warum sollte man reguläre Ausdrücke in Rust lernen? Die Sprache bietet eine sichere und schnelle Textverarbeitung, und die Crate regex garantiert Speichersicherheit und hohe Ausführungsgeschwindigkeit. Das macht Rust zu einer ausgezeichneten Wahl für das Parsen von Logs, Formularvalidierung, Verarbeitung von Konfigurationsdateien und andere Aufgaben.

\n\n

Installation und Einbindung der Crate regex

\n\n

Fügen Sie zunächst die Abhängigkeit regex zu Ihrer Cargo.toml-Datei hinzu:

\n\n
[dependencies]\nregex = "1.10"
\n\n

Importieren Sie anschließend das Modul in Ihren Code:

\n\n
use regex::Regex;
\n\n

Die Hauptstruktur, mit der Sie arbeiten werden, ist Regex. Eine Instanz kann mit der Methode Regex::new() erstellt werden, die ein Result zurückgibt, da das Muster ungültig sein kann.

\n\n
fn main() {\n    let re = Regex::new(r"^\\d{3}-\\d{2}-\\d{4}$").unwrap();\n    println!("Regex erstellt: {}", re.as_str());\n}
\n\n

Beachten Sie: Das Muster wird in rohen Strings (r"...") geschrieben, um das Escapen von Backslashes zu vermeiden.

\n\n

Grundlegende Operationen mit regulären Ausdrücken

\n\n

1. Prüfung auf Übereinstimmung: is_match

\n\n

Die Methode is_match gibt true zurück, wenn das Muster im String gefunden wird:

\n\n
use regex::Regex;\n\nfn main() {\n    let re = Regex::new(r"hello").unwrap();\n    let text = "hello world";\n    \n    if re.is_match(text) {\n        println!("Übereinstimmung gefunden!");\n    } else {\n        println!("Keine Übereinstimmungen");\n    }\n}
\n\n

Ausgabe: Übereinstimmung gefunden!

\n\n

2. Suche nach der ersten Übereinstimmung: find

\n\n

Die Methode find gibt Option<Match> zurück – die erste Übereinstimmung mit Positionsinformationen:

\n\n
use regex::Regex;\n\nfn main() {\n    let re = Regex::new(r"\\d+").unwrap();\n    let text = "Code: 12345, Preis: 678";\n    \n    if let Some(m) = re.find(text) {\n        println!("Gefunden: '{}' (Position {}..{})", m.as_str(), m.start(), m.end());\n    }\n}
\n\n

Ausgabe: Gefunden: '12345' (Position 6..11)

\n\n

3. Suche nach allen Übereinstimmungen: find_iter

\n\n

Um alle Übereinstimmungen zu erhalten, verwenden Sie den Iterator find_iter:

\n\n
use regex::Regex;\n\nfn main() {\n    let re = Regex::new(r"\\d+").unwrap();\n    let text = "Zahlen: 42, 100, 7";\n    \n    for m in re.find_iter(text) {\n        println!("Zahl: {}", m.as_str());\n    }\n}
\n\n

Ausgabe:

\n
Zahl: 42\nZahl: 100\nZahl: 7
\n\n

4. Extraktion von Gruppen: captures

\n\n

Gruppen im Muster (gekennzeichnet durch runde Klammern) ermöglichen das Extrahieren von Teilen der Übereinstimmung:

\n\n
use regex::Regex;\n\nfn main() {\n    let re = Regex::new(r"(\\w+)@(\\w+)\\.(\\w+)").unwrap();\n    let email = "user@example.com";\n    \n    if let Some(caps) = re.captures(email) {\n        println!("Vollständige E-Mail: {}", &caps[0]);\n        println!("Name: {}", &caps[1]);\n        println!("Domain: {}", &caps[2]);\n        println!("Zone: {}", &caps[3]);\n    }\n}
\n\n

Ausgabe:

\n
Vollständige E-Mail: user@example.com\nName: user\nDomain: example\nZone: com
\n\n

Praktische Anwendungsbeispiele

\n\n

Beispiel 1: Validierung einer Telefonnummer

\n\n

Wir prüfen, ob ein String dem Format einer russischen Nummer entspricht (z.B. +7-XXX-XXX-XX-XX):

\n\n
use regex::Regex;\n\nfn v                

Blogs

Buchempfehlungen