Eingabe mit cin >> eingabe ist problematisch für längere Texte
Die Verwendung von cin >> eingabe liest nur bis zum ersten Leerzeichen. Wenn du einen ganzen Satz oder längeren Text einlesen möchtest, solltest du stattdessen std::getline verwenden:
#include <iostream>
#include <string>
#include <regex>
using namespace std;
int main() {
    string eingabe;
    cout << "Bitte den englischen Text eingeben: ";
    getline(cin, eingabe); // Ganze Zeile einlesen
    string ausgabe;
    ausgabe = std::regex_replace(eingabe, std::regex("sc"), "fM"); // Ersetzen von "sc" durch "fM"
    cout << "Übersetzung: " << ausgabe << endl; // Ausgabe der Übersetzung
    return 0;
}
Die Syntax von std::regex_replace in C++ hängt davon ab, ob du mit Strings oder Iteratoren arbeitest. Hier sind die wichtigsten Varianten:
1. Mit einem String als Eingabe
Diese Variante ersetzt alle Vorkommen eines regulären Ausdrucks in einem String und gibt den modifizierten String zurück.
Syntax:
std::string regex_replace(    const std::string& str, 
    const std::regex& rgx, 
    const std::string& fmt, 
    std::regex_constants::match_flag_type flags = std::regex_constants::match_default
);
Parameter:
str: Der Eingabestring.rgx: Der reguläre Ausdruck, der die zu ersetzenden Muster definiert.fmt: Der Ersatzstring (kann Platzhalter wie$1für Capture Groups enthalten).flags: Optional; steuert das Verhalten der Ersetzung (z. B.std::regex_constants::format_first_onlyfür nur die erste Übereinstimmung).
Beispiel:
include <iostream>
#include <regex>
#include <string>
int main() {
    std::string text = "The quick brown fox jumps over the lazy dog.";
    std::regex pattern("fox");
    std::string replacement = "cat";
    std::string result = std::regex_replace(text, pattern, replacement);
    std::cout << result; // Ausgabe: "The quick brown cat jumps over the lazy dog."
    return 0;
}
2. Mit Iteratoren für große Datenmengen
Diese Variante arbeitet direkt mit Iteratoren und schreibt die Ergebnisse in einen Ausgabestream oder Container.
Syntax:
template <class OutIt, class BidIt>
OutIt regex_replace(
    OutIt out,
    BidIt first,
    BidIt last,
    const std::regex& rgx,
    const std::string& fmt,
    std::regex_constants::match_flag_type flags = std::regex_constants::match_default
);
- Parameter:
out: Der Iterator, an den die Ergebnisse geschrieben werden.first,last: Anfang und Ende des Eingabebereichs.rgx,fmt,flags: Wie oben.
 
Beispiel:
#include <iostream>
#include <regex>
#include <iterator>
#include <string>
int main() {
    std::string text = "there is a subsequence in the string";
    std::regex pattern("\\b(sub)([^ ]*)");
    std::string replacement = "sub-$2";
    std::string result;
    std::regex_replace(std::back_inserter(result), text.begin(), text.end(), pattern, replacement);
    std::cout << result; // Ausgabe: "there is a sub-sequence in the string"
    return 0;
}
3. Verwendung von Flags
Mit Flags kannst du das Verhalten der Ersetzung anpassen:
std::regex_constants::format_first_only: Ersetzt nur die erste Übereinstimmung.std::regex_constants::format_no_copy: Kopiert nur die Übereinstimmungen und ignoriert den Rest des Strings.
Beispiel mit Flags:
#include <iostream>
#include <regex>
#include <string>
int main() {
    std::string text = "abc def ghi";
    std::regex pattern("abc|def");
    
    // Ersetzt nur die erste Übereinstimmung
    std::string result = std::regex_replace(text, pattern, "XYZ", std::regex_constants::format_first_only);
    
    std::cout << result; // Ausgabe: "XYZ def ghi"
    return 0;
}
Zusammenfassung
Die Funktion std::regex_replace ist äußerst flexibel:
- Für einfache Ersetzungen kannst du direkt mit Strings arbeiten.
 - Für größere Datenmengen oder Streams sind Iteratoren besser geeignet.
 - Mit Flags kannst du das Verhalten feinjustieren.