Ich bin ziemlich vertraut mit Regex, aber ich bin nicht vertraut mit C++ 11 std::regex_replace
. Ich verbrachte mehr als eine Stunde damit, herauszufinden, wie man eine einfache Dateierweiterung ersetzt, aber nichts funktioniert!Regex Ersatz Dateierweiterung Präfix Platzierung funktioniert nicht - ersetzen Übereinstimmungen
Was ich erreichen möchte, ist ziemlich einfach. Ich möchte myfile.pdf
durch myfile.txt
ersetzen. Also schrieb ich meine Regex Dateien übereinstimmen, die mit .pdf
Ende:
std::regex regex("^.*\\.(pdf)$")
Und nach a reference und nach einem cheat-sheet, ich mag das Präfix sehen (was auch immer vor einem Spiel kommt), so verwende ich:
std::string myStr = std::regex_replace(std::string("HiThere.pdf"), regex, std::string("$`"))
std::cout<< myStr <<std::endl;
Und ich bekomme eine leere Zeichenfolge! Das passiert, obwohl ich ein Match bekomme! Um zu zeigen, dass ich eine Übereinstimmung erhalte, ersetze einfach "$" durch "$ 1", und du wirst sehen, dass die erste Übereinstimmung die ganze Zeichenfolge ersetzt.
Eine Seitennotiz, nach allen Referenzen, $ 0 sollte die ganze Zeichenfolge anzeigen, aber das tut es nicht!
Alles, was ich erreichen möchte, ist, diese Übereinstimmung durch ".txt" zu ersetzen. Was mache ich hier falsch?
@LightnessRacesinOrbit Ich glaube, ich sehe das Problem ... Danke. Lass mich es nochmal versuchen. –
Benötigen Sie wirklich eine Regexp, um '.pdf' durch '.txt' am Ende eines Strings zu ersetzen? – Holt
@Holt Es ist der sauberste und kürzeste Weg es zu tun (das ich kenne). –