In vielen Programmen werden zum Suchen ähnlicher Muster reguläre Ausdrücke verwendet. Beeindruckend ist, dass alle Programme die Ausdrücke gleich interpretieren. Das liegt allerdings nicht in erster Linie an der Harmoniesucht der UNIX-Programmierer, sondern einfach daran, dass UNIX die Funktion als Bibliothek zur Verfügung stellt.
Nach POSIX-Standard werden vier Funktionen zur Verfügung gestellt:
- regcomp()
- regexec()
- regerror()
- regfree()
Diese wird dann mit der Funktion regexec() auf den zu durchsuchenden Text angewandt.
Wird die Variable nicht mehr benötigt, wird sie mit regfree() freigegeben. regerror() liefert die Fehlermeldung, wenn regcomp() oder regexec() einen Fehler melden, indem sie einen Wert ungleich 0 zurückgeben.
Programme, die diese Funktionen benutzen müssen die Datei regex.h einbinden.
Als Beispiel dient hier eine einfache Nachbildung des Programmes grep.
#include <stdlib.h> #include <stdio.h> #include <regex.h> int main(int argc, char *argv[]) { char puffer[512]; int i; regex_t regexpr; FILE *fp; if (argc<3) { printf("Usage: %s regexpression files\n", argv[0]); return -1; } if (regcomp(®expr, argv[1], REG_EXTENDED|REG_NEWLINE)) { printf("Problem beim Ausdruck %s\n", argv[1]); return -2; } for (i=2; i<argc; i++) { fp = fopen(argv[i], "r"); if (fp!=NULL) { while (!feof(fp)) { fgets(puffer, sizeof(puffer)-1, fp); if (regexec(®expr, puffer, 0, NULL, 0)==0) { puts(puffer); } } fclose(fp); } } regfree(®expr); return 0; } |
Diese Seite basiert auf Inhalten aus dem Buch Arnold Willemer: Wie werde ich UNIX-Guru? |