uzycie regexu w c

uzycie regexu w c
BA
  • Rejestracja:około 9 lat
  • Ostatnio:ponad 5 lat
  • Postów:47
0

Cześć,
próbuje użyć regexu w c. Chodzi mi o wyłapanie "-write [jakaś liczba] "[jakiś tekst]"". Zrobiłem to tak:

Kopiuj
regex_t writeRegex;
int writeReg;

writeReg = regcomp(&writeRegex, "-\swrite\s[\d]+\s\"[^\"]+\"", 0);
if (writeReg) {
    fprintf(stderr, "Could not compile regex\n");
    exit(1);
}

writeReg = regexec(&writeRegex, bufor, 0, NULL, 0);

if(!writeReg){
printf("PASUJE");
}
else{
printf("NIE PASUJE");
} 

jednak jak przekaże do zmiennej bufor "-write 5 "komunikat", to program sygnalizuje, że ten łańcuch nie pasuje do regexu. Proszę o pomoc.

edytowany 2x, ostatnio: bananananafu
lion137
  • Rejestracja:około 8 lat
  • Ostatnio:około 2 godziny
  • Postów:4935
0

Poeksperymentuj tutaj: https://regex101.com


BA
regexy są napisane dobrze, robiłem to przy wykorzystaniu tej stronki:p
MarekR22
Moderator C/C++
  • Rejestracja:ponad 17 lat
  • Ostatnio:3 minuty
1

back slash w stringu c ma specjalne znaczenie, wiec nie można wklejać bezpośrednio wyrażenia regularnego do literału.
To powinno wyglądać tak:

Kopiuj
regex_t writeRegex;
int writeReg;

writeReg = regcomp(&writeRegex, "\\bwrite\\s+(\\d+)\\s\"([^\"]+)\"", 0);
if (writeReg) {
    fprintf(stderr, "Could not compile regex\n");
    exit(1);
}

writeReg = regexec(&writeRegex, bufor, 0, NULL, 0);

if(!writeReg){
     printf("PASUJE");
}
else{
     printf("NIE PASUJE");
} 

Jeśli są błędy z użyciem biblioteki to sorry, ale nie znam jej.

W C++11 jest łatwiej bo wprowadzono raw string, może do nowego C też je wprowadzono?

Kopiuj
char regExpString[] = R"re(\bwrite\s+(\d+)\s"([^"]+)")re";

Jeśli chcesz pomocy, NIE pisz na priva, ale zadaj dobre pytanie na forum.
edytowany 1x, ostatnio: MarekR22

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.