Ich bin neu in regulären C++ - Ausdrücken und kann sie nicht mit Zeichenfolgen anstelle von char * arbeiten lassen. Die Beispiele, die ich bisher gesehen habe, waren immer für c-Saiten.Warum löst ein C++ - Code für reguläre Ausdrücke, der mit "cmatch" arbeitet, eine Ausnahme mit "smatch" aus?
Mein richtiges Programm, das ich hier nicht einmal versuchen werde, verwendet Sub-Matches, aber ich konnte nicht funktionieren , also habe ich versucht, ein sehr einfaches Arbeitsbeispiel zu ändern, aber es funktioniert auch nicht. Ich verwende Visual Studio 2010 Ultimate.
Das Original - Arbeiten - Code:
const char *first = "abcd";
const char *last = first + strlen(first);
std::cmatch mr;
std::regex rx("abc");
std::regex_constants::match_flag_type fl = std::regex_constants::match_default;
std::cout << "search(f, l, \"abc\") == " << std::boolalpha
<< regex_search(first, last, mr, rx) << std::endl;
std::cout << " matched: \"" << mr.str() << "\"" << std::endl;
std::cout << "search(\"xabcd\", \"abc\") == " << std::boolalpha
<< regex_search("xabcd", mr, rx) << std::endl;
std::cout << " matched: \"" << mr.str() << "\"" << std::endl;
Der modifizierte Code:
const string first = "abcd"; // char * => string
std::smatch mr; // cmatch => smatch
std::regex rx(string("abc"));
std::regex_constants::match_flag_type fl = std::regex_constants::match_default;
// this works:
std::cout << "search(f, l, \"abc\") == " << std::boolalpha
<< regex_search(first, mr, rx) << std::endl;
std::cout << " matched: \"" << mr.str() << "\"" << std::endl;
// after the next line executes mr seems good to me:
// mr[0] = {3, matched:true, first="abcd", second="d",...}
std::cout << "search(\"xabcd\", \"abc\") == " << std::boolalpha
<< regex_search(string("xabcd"), mr, rx) << std::endl;
// but the following line gives the error
// "Debug assertion failed"
// Expression: string iterators incompatible
std::cout << " matched: \"" << mr.str() << "\"" << std::endl;
Seltsam, dass ein Teil des modifizierten Code funktioniert, während der nächste Teil eine Ausnahme verursacht. Ich habe sogar versucht, mr [0] .str() zu verwenden, aber ich habe dieselbe Fehlermeldung erhalten. Könnten Sie mir helfen, dieses Problem zu lösen?
Vielen Dank! Ich sehe, ich habe das nicht durchdacht. Dies erklärt auch vollständig, warum mein ursprünglicher Code abstürzt. – afalco