Mam problem z wyrażeniem regularnym, próbuje napisać odpowiedni pattern który na onlinowym regex matcher wyświtalo jako poprawny, jednak mam problem z imprementacją go do programu, ponieważ nie wyszukuje nic, ciągle smatch empty.
if (czyWczytano(r));
{
fseek(stream, 0, SEEK_END);
int w = ftell(stream);
char*napis = new char[w + 1];
fseek(stream, 0, SEEK_SET);
fread(napis, w, 1, stream);
napis[w] = 0;
string tekst(napis);
smatch m;
regex e("Nazwa:\\s+(\\w+|\\w+\\s+\\w+)\\s+Rodzaj:\\s+(\\w+|\\w+\\s+\\w+)\\s+Waga:\\s+(\\d+|\\d+\\.\\d+)\\s\\[kg\\]\\s+Cena:\\s(\\d+|\\d+\\.\\d+)\\szl\\.\\s+Kolor:\\s(\\w+)\\s+");
cout << m.size();
sleeper();
while (regex_search(tekst, m, e))
{
sTowar pom;
pom.nazwa = m[1];
pom.rodzaj = m[2];
string val_wagi = m[3];
pom.waga = atof(val_wagi.c_str());
string val_ceny = m[4];
pom.cena = atof(val_ceny.c_str());
pom.kolor = m[5];
t.push_back(pom);
tekst = m.suffix().str();
}
delete[] napis;
fclose(stream);
}
Stricte jesli chodzi o pattern to
regex e("Nazwa:\\s+(\\w+|\\w+\\s+\\w+)\\s+Rodzaj:\\s+(\\w+|\\w+\\s+\\w+)\\s+Waga:\\s+(\\d+|\\d+\\.\\d+)\\s\\[kg\\]\\s+Cena:\\s(\\d+|\\d+\\.\\d+)\\szl\\.\\s+Kolor:\\s(\\w+)\\s+");
Natomiast dane pobierane z pliku sa takim wyrazeniem
Nazwa: japko
Rodzaj: owoc
Waga: 10 [kg]
Cena: 3.5 zl.
Kolor: zielony
Nazwa: banani
Rodzaj: owoc
Waga: 14 [kg]
Cena: 4 zl.
Kolor: zolty
Bardzo dziękuje za pomoc.
\s+
chyba, że C++ ma troche inne patterny to wtedy możliwe\
to znak specjalny, dlatego by go użyć np. w tablicy znaków, trzeba go wpisać podwójnie. https://msdn.microsoft.com/en-us/library/6aw8xdf2.aspx