regex zusammensetzen
-
Hi,
ich will zwei
std::regexzusammensetzen, aber irgendwie finde ich in den Referenzen keine Funktion dafür?regex r1 ( "[^<]*" ); regex r2 ( "<" ); regex r3 = /* r1 + r2 */;Wie könnte ich das realisieren.
Danke im Voraus.
-
Einfach die Strings zusammenaddieren?
-
hääääää schrieb:
Einfach die Strings zusammenaddieren?
Das will ich vermeiden, weil ich will, dass meine Funktionen
std::regexzurückgeben. Ich willregex_search( get_regex() );schreiben
und nicht
regex_search( regex( get_regex() ) );schreiben
Ich mach mal eben ein Beispiel: Ich will einen Link aus einen html-Dokument und manchmal auch den Linktext. Wenn ich den Linktext nicht brauche, will ich auch nicht nach ihm suchen. Darum hab ich zwei Funktionen.
Eine die nur nach einem Link sucht.
Eine die nach einem Link und dem dazugehörigen Text sucht.#include <iostream> #include <regex> #include <string> using namespace std; regex regex_for_links( const string& link_pattern ) { const string pattern_start = "<\\s*A\\s+[^>]*href\\s*=\\s*\"("; const string pattern_end = ")\""; const string pattern = pattern_start + link_pattern + pattern_end; return regex( pattern, regex::icase ); } regex regex_for_links_and_texts( const string& link_pattern, const string& text_pattern ) { const string text_pattern_start = "[^>]*>\\s*("; const string text_pattern_end = ")\\s*<\\s*/A\\s*>"; const string pattern = text_pattern_start + text_pattern + text_pattern_end; return /* regex_for_links(link_pattern) + regex(pattern, regex::icase) */; // Was mache ich hier nun am besten? } int main() { string html( "<a href=\"google.de\"> google </a>" ); { // NUR LINKS smatch m; regex_search( html, m, regex_for_links("[^\"]*") ); for(auto found : m) cout << found << '\n'; } { // LINKS + TEXTE smatch m; regex_search( html, m, regex_for_links_and_texts("[^\"]*", "[^\"]*") ); for(auto found : m) cout << found << '\n'; } }
-
Unten hab ich aus Versehen einen copy&paste Fehler gemacht:
regex_search( html, m, regex_for_links_and_texts("[^\"]*", "[^<]*") );
-
Ich würde regex_search immer beides suchen lassen und dann aus smatch entweder nur den Link oder beides nehmen.