Mam ciekawy problem napisałem sobie kod który mi sprawdza poprawność dopasowania wyrażenia regularnego :
- Kod: Zaznacz cały
String Data="4100FE3FB811";
String RegularExpr="(STOPPED)";
std::string result=Data.t_str();
boost::regex re(RegularExpr.t_str());
boost::smatch m;
boost::regex_search(result,m,re);
bool r = m[1].matched;
Kod działa i wszystko jest super do czasu aż przerobiłem go na funkcję :
- Kod: Zaznacz cały
bool BoostObd::CheckRegularExpr(String Data,String RegularExpr) {
std::string result=Data.t_str();
boost::regex re(RegularExpr.t_str());
boost::smatch m;
boost::regex_search(result,m,re);
return m[1].matched;
}
Wywołując tą funkcję w taki sposób :
- Kod: Zaznacz cały
TForm3::Button1Click(TObject *Sender) {
bool t2 = obd.CheckRegularExpr("4100FE3FB811","(STOPPED)");
}
Kompilator wywala błąd :
First chance exception at $7C812AFB. Exception class boost::regex_error with message 'Exception Object Address: 0xAC5616'. Process Project2.exe (2868)
Oraz komunikat :
external exception eefface
Ale co jest śmieszne jeżeli zrobię to tak :
- Kod: Zaznacz cały
TForm3::Button1Click(TObject *Sender) {
String Data="4100FE3FB811";
String RegularExpr="(STOPPED)";
std::string result=Data.t_str();
boost::regex re(RegularExpr.t_str());
boost::smatch m;
boost::regex_search(result,m,re);
bool r = m[1].matched;
bool t2 = obd.CheckRegularExpr("4100FE3FB811","(STOPPED)");
}
Wszystko działa OK :[ może ktoś wie o co tutaj chodzi ???
Ps. Np jeżeli nie da się dopasować wyrażenia - nie pasuje to wywala ten błąd co wyżej napisałem :
- Kod: Zaznacz cały
bool t2 = obd.CheckRegularExpr("4100FE3FB811","(STOPPED)");
Ale jak da się dopasować to nie ma błędu

- Kod: Zaznacz cały
bool t2 = obd.CheckRegularExpr("4100FESTOPPED3FB811","(STOPPED)");
Pozdrawiam i dzięki za pomoc