Reguläre Ausdrücke in C++ mit Beispielen: Praktischer Leitfaden

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 C++ mit Beispielen: Von den Grundlagen zur Praxis



Reguläre Ausdrücke (regex) sind ein leistungsstarkes Werkzeug zum Suchen, Extrahieren und Ersetzen von Textteilen nach einem Muster. In C++ wurde die Unterstützung für reguläre Ausdrücke im Standard C++11 eingeführt und ist in der Bibliothek <regex> implementiert. In diesem Artikel analysieren wir praktische Beispiele zur Verwendung von std::regex, die Ihnen helfen, Zeichenketten in Ihren Projekten effizient zu verarbeiten.



1. Grundlagen von std::regex: Erstellung und einfache Suche



Für die Arbeit mit regulären Ausdrücken in C++ werden drei Hauptklassen verwendet: std::regex (Muster), std::smatch (Ergebnis für eine Zeichenkette) und std::sregex_iterator (Iterator für mehrere Übereinstimmungen).



Beispiel 1: Prüfung, ob eine Zeichenkette einem Muster entspricht

#include <iostream>#include <regex>#include <string>

int main() { std::string email = "user@example.com"; // Muster zur E-Mail-Überprüfung (vereinfacht) std::regex pattern(R"([a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,})"); if (std::regex_match(email, pattern)) { std::cout << "E-Mail ist korrekt!" << std::endl; } else { std::cout << "E-Mail entspricht nicht dem Format." << std::endl; } return 0;}


Die Funktion std::regex_match prüft, ob die gesamte Zeichenkette vollständig dem Muster entspricht. Beachten Sie die Verwendung von R"(...)" – dies ist ein Raw-String-Literal, das das Escapen von Backslashes überflüssig macht.



Beispiel 2: Suche nach einer Teilzeichenkette

#include <iostream>#include <regex>#include <string>

int main() { std::string text = "Meine Nummer: +7 (123) 456-78-90. Rufen Sie mich an!"; std::regex phone_pattern(R"(\\+7\\s?\\(\\d{3}\\)\\s?\\d{3}-\\d{2}-\\d{2})"); std::smatch match; if (std::regex_search(text, match, phone_pattern)) { std::cout << "Gefundene Nummer: " << match.str() << std::endl; std::cout << "Position: " << match.position() << std::endl; } else { std::cout << "Nummer nicht gefunden." << std::endl; } return 0;}


std::regex_search sucht nach der ersten Übereinstimmung mit dem Muster in der Zeichenkette. Das Ergebnis wird in einem std::smatch-Objekt gespeichert, aus dem die gefundene Teilzeichenkette und ihre Position extrahiert werden können.



2. Datenextraktion mit Gruppen (Capturing Groups)



Gruppen ermöglichen das Extrahieren einzelner Teile einer Übereinstimmung. Sie werden mit runden Klammern () gekennzeichnet.



Beispiel 3: Parsen eines Datums

#include <iostream>#include <regex>#include <string>

int main() { std::string date = "Heute ist der 15.04.2025"; std::regex date_pattern(R"((\\d{2})\\.(\\d{2})\\.(\\d{4}))"); std::smatch match; if (std::regex_search(date, match, date_pattern)) { std::cout << "Vollständiges Datum: " << match[0] << std::endl; std::cout << "Tag: " << match[1] << std::endl; std::cout << "Monat: " << match[2] << std::endl; std::cout << "Jahr: " << match[3] << std::endl; } return 0;}


Beispiel 4: Extrahieren aller Übereinstimmungen mit einem Iterator

#include <iostream>#include <regex>#include <string>

int main() { std::string log = "ERROR: Datei nicht gefundenWARNING: Niedriger AkkustandINFO: Vorgang abgeschlossenERROR: Verbindungszeitüberschreitung"; std::regex error_pattern(R"(^ERROR:\\s*(.+)$)"); // Verwenden von std::sregex_iterator zum Durchlaufen aller Zeilen auto words_begin = std::sregex_iterator(log.begin(), log.end(), error_pattern); auto words_end = std::sregex_iterator(); std::cout << "Gefund

Blogs

Buchempfehlungen