Ich habe diesen Code geschrieben, der Dateien findet, die das Muster "Match" in der Zeichenfolge Str findet und druckt.Get Zeile von Regex-Match in C
#include <regex.h>
#include <string.h>
#include <stdio.h>
int main(int argc, const char *argv[]) {
char *str = strdup("aaaaaaa match aaaaaaaaaaaaaaaaaaaa\n"
"bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb\n"
"cc match ccccccccccccccccccccccccc");
regex_t regex;
regmatch_t match;
regcomp(®ex, "match", REG_EXTENDED);
while(regexec(®ex, str, 1, &match, 0) != REG_NOMATCH) {
int beg = match.rm_so;
int end = match.rm_eo;
int len = end-beg;
char *match_string = str+beg;
match_string[len] = '\0';
printf("%s\n", match_string);
str = str + end + 1;
}
return 0;
}
Mein Problem ist, dass ich herausfinden muss, auf welcher Zeile das Spiel beginnt. Vorzugsweise sollte dies mit mehrzeiligen Übereinstimmungen funktionieren, aber eine einzelne Zeile ist gerade in Ordnung. Hat Regex eine versteckte Funktion, mit der ich das Problem lösen kann?
Normalerweise lesen Sie Zeile für Zeile und verarbeiten Zeile für Zeile, um zu verfolgen, welche Zeile außerhalb der Regex ausgeführt wird. –
Warum verwenden Sie 'strtok()' nicht, um nach einer neuen Zeile oder einer anderen Methode zu teilen, um die Zeichenfolge zu teilen? – Stargateur
Das ist eine mögliche Lösung, jetzt, wo ich darüber nachdenke, könnte ich eine Liste mit dem Beginn der einzelnen Übereinstimmungen führen und dann iterieren, um die Nummer von '\ n' vor dem Beginn jedes Spiels zu finden. –