Frage zu regulären Ausdrücken und Strings
-
Hallo!
Ich habe vor kurzem mit dem Programmieren begonnen und mich aus diversen Gründen für C++ als erste Sprache entschieden. Bis dato komme ich auch gut zurande, aber bei folgendem Problem hänge ich. Ich habe mir vorgenommen, ein Progrämmchen zu schreiben, in dem folgende Zeilen auftreten:
string a {"Das ist das Beispiel"};
string b {"ist"};
regex r {R"(\s*\ist\s*)"};Was in string b steht, kann z. B. eingelesen oder vom Benutzer eingegeben worden sein. Mein Ziel ist es nun, in dem regulären Ausdruck zwischen den beiden \s* immer das zu benutzen, was in b steht und damit in string a zu suchen. Wenn ich dort selbst das Wort ist reinschreibe, dann funktioniert es, aber wie schaffe ich es, dass dort immer automatisch der Inhalt von string b steht?
Vielen Dank!
-
~~Du musst den String selber zusammenbasteln.
http://www.cplusplus.com/reference/string/string/operator+/
Achte aber auf die \
\s ist keine gültige Escapesequence, darum klappt das.Eigentlich musst du die \ auch "escapen", also doppelt hinschreiben.~~
Edit: Kannte das R noch nicht
-
Hmm, ich bin mir nicht sicher, ob Konkatenation das ist, was das Problem löst. Bedeutet das, dass ich hier nicht mit einem regulären Ausdruck arbeiten kann, an den immer automatisch der jeweilige Inhalt von string b übergeben wird? Weil wenn ja, dann schreib ich es ohnehin um.
-
Ich glaub du willst
std::smatch.
-
Ich habs eben mal mit smatch versucht, ich habe folgendes gebaut:
regex t {R"(\s* m.format("$1") \s*)"};
Das $1 ergab sich daraus, dass ich aus einer Datei eingelesen habe, aus der jeweils zwei Elemente geholt wurden, die ich in submatches erfasst habe. Mit dem ersten sollte nun, das ist mein Ziel, der Eingabetext in string a durchsucht werden. Dafür habe ich obigen regulären Ausdruck gebastelt. Es funktioniert aber nicht.
-
Dann kuck dir die Examples auf den C++-Referenzen an.