Avatar billede dank Nybegynder
03. juli 2004 - 23:10 Der er 10 kommentarer

Simpel regular expression

Jeg er helt ny i C.. Under mig over hvordan man laver regexp's

f.eks.

#include <stdio.h>

int main(){

  char myline[200] = "dette er en test 5...";

    * Hvis myline matcher \^dette .* test 5\.\.\.$\

    printf("ok");

return 0;
}


Jeg synes ikke google er min ven idag. :o) Måske i kan hjælpe mig lidt videre :)
Avatar billede erikjacobsen Ekspert
03. juli 2004 - 23:16 #1
Avatar billede arne_v Ekspert
03. juli 2004 - 23:22 #2
Check om du har /usr/include/regexp.h
Avatar billede dank Nybegynder
03. juli 2004 - 23:28 #3
Takker.. Jeg har en lille smule kendskab til pcre, så jeg kigger nærmere på Erik's link.

regexp.h er svj kan se en del af glibc, men gnu.org siden er nede p.t. så det må jeg kigge nærmere på senere :)
Avatar billede dank Nybegynder
04. juli 2004 - 15:32 #4
... Nogen der har prøvet pcre med C.. Synes ikke jeg helt kan få det til at spille som det skal...


#include </usr/local/include/pcre.h>
#include <string.h>
#include <stdio.h>

#define pcre_compile
#define pcre_exec
#define pcre_get_substring
#define pcre_free_substring

    int main(int argc, char **argv) {
    pcre *re = NULL;
    pcre_extra *pe = NULL;
    const char *error = NULL;
    int erroffset;
    int ovector[30];
    int matches;
    const char *match_string;
    const char *subject = "abc";
    int x;

          re = pcre_compile("abc", 0, &error, &erroffset, NULL);
          matches = pcre_exec(re, NULL , subject, strlen(subject), 0, 0, ovector, 5);
          printf("subject=\"%s\", matches=%d\n", subject, matches);


          for (x=0 ; x < matches ; x++) {
          pcre_get_substring(subject, ovector, matches, x, &match_string);
          printf("match %d: \"%s\")\n", x, match_string);
          pcre_free_substring(match_string);
          }

  return 0;
}



Giver følgende output:

subject="abc", matches=5
match 0: "@y@")
match 1: "@y@")
match 2: "@y@")
match 3: "@y@")
match 4: "@y@")

Hvilket vist er noget volapyk i mine ører :o)
Avatar billede erikjacobsen Ekspert
04. juli 2004 - 15:48 #5
Giver pcre_get_substring ikke et 0 i samtlige 5 tilfælde?
Avatar billede dank Nybegynder
04. juli 2004 - 16:15 #6
Det giver desværre ikke meget mening for mig.. Denne gang må jeg indrømme, at jeg er stået lidt af :)
Avatar billede erikjacobsen Ekspert
04. juli 2004 - 17:05 #7
int x=pcre_get_substring(......);

Hvad er x?
Avatar billede dank Nybegynder
04. juli 2004 - 22:25 #8
Det kan jeg slet ikke compile. Får følgende:

linux:/c # gcc pcre2.c
pcre2.c: In function `main':
pcre2.c:29: warning: initialization makes integer from pointer without a cast

Synes det rigtigt svært at finde søge på google, når det gælder C. Synes at langt de fleste hits omhandler folk der har problemer med at compile et eller andet. :)
Avatar billede erikjacobsen Ekspert
04. juli 2004 - 22:29 #9
Jamen det er jo også ca. 40 år gammel teknologi, det her C ;)

Ok, jeg har så ikke prøvet det, men i min hjerne afleverer pcre_get_substring et
tal der angivet om den pågældende submatch dur eller ikke dur. Hos dig måske
en char*.

Jeg tror jeg holder op med at gætte ;)
Avatar billede dank Nybegynder
04. juli 2004 - 22:33 #10
Ja.. :) Jeg holder også her med regexp indtil videre.. Må jo indrømme det er sådan en dejlig ting, jeg efterhånden bruger faktisk dagligt i Perl Scripts.. Lidt frustrerende det skal være så svært i C.

Man tak i alle tilfælde :o)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester