reguläre ausdrücke



  • Hallo,
    bin grad dabei mich ein wenig mit C zu beschäftigen.
    Folgendes Problem : hoffe ihr könnt helfen

    ich HABE EINE Datei die ungefähr so aussieht

    print word
    print

    wenn das schlüsselwort print heißt und dahinter ein beliebiges wort soll nur das wort gedruckt werden,wenn nur print in der zeile steht soll alles gedruckt werden

    hatte an reguläre ausdrücke gedacht.

    wie kann ich eine Zeile(String) auf reguläre Ausdruck überprüfen

    sscanf(zeile,"%^print$.... //schreibe alles (nach print zeilenende

    ssaanf(zeile,"%^print [a-z]* //schreibe nur das wort

    danke euch

    gruß



  • Wie kann man
    einen String auf einen bestimmten regulären Ausdruck überürüfen

    Danke euch

    Gruß



  • Benutz doch einfach fgets und mach dann ein strcmp gegen "print".



  • Hallo

    ich möchte eine String auf einen bestimmten regulären Ausdruck überprüfen:

    char String[] = "i Word";

    der regulärer Ausdruck [a-z]* große Buchstaben sind also nicht erlaubt

    oder [^a] am Anfang soll ein a stehen.

    Hat hierfür jemand ein rezept?

    danke euch



  • Ist das jetzt ein neues Thema, das mit dem alten nichts mehr zu tun hat?

    Naja, wirklich schwer ist das ja nicht, 'ne C-Bibliothek für reguläre Ausdrücke zu finden...
    Für die glibc findest du hier eine Anleitung.
    Weil ich das selbst nicht ganz uninteressant finde, hab ich mal probiert...
    Sieht so aus:

    #define _POSIX_C_SOURCE 2
    
    #include <stdio.h>
    #include <stdlib.h>
    #include <regex.h>
    
    int main(int argc, char **argv) {
    	regex_t myregex;
    	int comp_res = regcomp(&myregex, "[a-z]*", 0);
    	if(comp_res != 0) {
    		perror("Could not compile regex");
    		exit(EXIT_FAILURE);
    	}
    
    	const char *txtstr =  "this is a text.";
    	regmatch_t match[1];
    	int exec_res = regexec( &myregex, txtstr, 1, match, 0);
    	if(exec_res ==REG_NOMATCH) {
    		perror("Didn't match.");
    	}
    	else if(exec_res == REG_ESPACE) {
    		perror("Run out or memory");
    		exit(EXIT_FAILURE);
    	}
    	else if(exec_res == 0) {
    		puts("That's a match!");
    		char match_str[match[0].rm_eo - match[0].rm_so + 1];
    
    		int i, j;
    		for(i=match[0].rm_so, j=0; i<match[0].rm_eo; ++i, ++j) match_str[j] = txtstr[i];
    		match_str[j] = '\0';
    
    		printf("%s\n", match_str);
    	}
    
    	exit(EXIT_SUCCESS);
    }
    

Anmelden zum Antworten