Hilfe bei regulärem Ausdruck
-
So blöd das klingt, ich kriegs nicht hin mir reguläre Ausdrücke (mit boost, aber das gibt's ja auch in der C++ Standard Lib oder?) beizubringen..
Wenn mir jemand folgendes Beispiel lösen könnte, wär ich aber wohl schon nen ganzen Schritt weiter.Ich hab mehrere
std::string
's, wo irgendwo sowas drin vorkommt: "sxxexx"
Das 's' und das 'e' können auch mal groß sein. x steht für eine Ziffer. Ich will einfach nur die beiden Zahlen nach diesen beiden Buchstaben haben und in zwei ints speichern. Kann doch nicht so schwer sein.
-
Hast du Probleme mit regulären Ausdrücken an sich oder mit der Benutzung in C++? Für ersteres gibt es viele Online-Seiten, auf denen du live deine regulären Ausdrücke testen kannst. Ich benutze z.B. http://rubular.com, weil ich reguläre Ausdrücke haupsächlich in Ruby benutze. Ein hier passender regulärer Ausdruck wäre
s(\d{2})e(\d{2})
mit dem Parameter "case insensitive". Dann stehen die Zahlen in den beiden gematchten Gruppen.
-
Ich hab jetzt ganz konkret Probleme mit der Benutzung von Boost.Regex in C++.
Ich hab keine Ahnung, wie ich jetzt mithilfe dieses regulären Ausdrucks(\d{2})e(\d{2})
an meine 2 Variablen aus dem string in C++ mit boost komme. Ein kleines Codeschnipsel wäre nett. Den Rest kann ich mir ableiten.
-
Ich habe heute das erste Mal Boost mit Visual Studio kompiliert und als Test das hier geschrieben, vielleicht hilft es dir:
#include <iostream> #include <boost/regex.hpp> int main() { boost::regex regex("(one|two|three)"); boost::cmatch matches; boost::regex_search("three in a row", matches, regex); std::cout << "The search-string is: three in a row" << std::endl; std::cout << "First match of the RegEx\"(one|two|three)\" is: " << matches[1] << std::endl; std::cin.get(); return 0; }
-
Danke euch beiden, hab mir grad was gebastelt was mir eine Unmenge an Arbeit gespart hat Die Beispiele erklärn alles.
Man muss eben nur beachten, dass beis(\d{2})e(\d{2})
die Backslashes doppelt gemacht werden müssen in C++ (sonst sind's unlogische Escape-Sequenzen).Das fertige Programm sieht dann so aus:
#include <iostream> #include <boost/regex.hpp> int main() { std::string s = "jsajd/(!1..s05E09T?.!,,d"; boost::regex regex("(\\d{2})e(\\d{2})", boost::regex_constants::icase); //case-insensitive boost::cmatch matches; boost::regex_search(s.c_str(), matches, regex); std::cout << "s = " << matches[1] << " e = " << matches[2]; }
Ausgabe:
s = 05 e = 09