bergetun Skrevet 9. mai 2004 Del Skrevet 9. mai 2004 La oss si jeg har denne koden her.. char* htmlLinje = "Dette er en linje <a href=\"index.html\">link1</a> Windows er ett \"stabilt\" OS <a href=\"meny.htm\"> Link2</a> mer piss om at windows suger"; Det jeg skal gjøre er å hente ut kun linkene fra htmlLinje, altså index.html og meny.htm i dette tilfellet. Lenke til kommentar
A_N_K Skrevet 9. mai 2004 Del Skrevet 9. mai 2004 /me foreslår å slå opp på regular expressions, for C blir vel dette POSIX regex (regex.h). Lenke til kommentar
bergetun Skrevet 9. mai 2004 Forfatter Del Skrevet 9. mai 2004 /me foreslår å slå opp på regular expressions, for C blir vel dette POSIX regex (regex.h). Hmm. regexp har aldri vært min sterke side Lenke til kommentar
A_N_K Skrevet 9. mai 2004 Del Skrevet 9. mai 2004 (endret) Du kan like gjerne lære det først som sist: "<a href=\"([^\"]+)\">" Denne regexpen funker i Python i alle fall. Edit: Forklaring på regexp -> Uttrykk omsluttet av paranteser ([^\"]+) blir gruppert, tanken er at du kan hente ut disse gruppene fra en match. Uttrykket vi ser etter [^\"]+ vil si at vi er ute etter flere ('+') forekomster av andre tegn enn " [^\"] , dvs. en link avsluttet av tegnet ". Resultatet er at vi fanger opp tekst omsluttet av '<a href="' og '">'. Vet ikke helt hvordan dette gjøres med POSIX regex (vant til Python/Perl og Boost regex), men i Python kan man hente ut alle matchende forekomster i en streng. Endret 9. mai 2004 av A_N_K Lenke til kommentar
søppel Skrevet 9. mai 2004 Del Skrevet 9. mai 2004 (endret) Du kan jo jalle rundt med disse, slå opp med man: strstr .. strspn .. strsub .. index .. strsep .. strtok Det er kanskje like greit å lære regexp. ..eller kanskje flex eller yacc eller-noe-sånnt-noe. Endret 9. mai 2004 av søppel Lenke til kommentar
A_N_K Skrevet 9. mai 2004 Del Skrevet 9. mai 2004 Like greit å lære seg regexp med det samme, du kommer til å takke deg selv senere :_p Lenke til kommentar
d0ppler Skrevet 10. mai 2004 Del Skrevet 10. mai 2004 Like greit å lære seg regexp med det samme, du kommer til å takke deg selv senere :_p jepp, regular expressions er uunværlig først du lærer det! Lenke til kommentar
bergetun Skrevet 10. mai 2004 Forfatter Del Skrevet 10. mai 2004 Jeg har prøvd å finne noen bra sider som tar for seg regexp i C men jeg har ikke funnet noen. ER det noen her som vet om noen bra sider for dette ? Takker .. Lenke til kommentar
d0ppler Skrevet 10. mai 2004 Del Skrevet 10. mai 2004 googlet, og fant denne. jeg lærte meg regex med Mastering Regular Expressions, 2nd Edition Lenke til kommentar
A_N_K Skrevet 10. mai 2004 Del Skrevet 10. mai 2004 (endret) Ok, tenkte jeg kunne benytte anledningen til å gjøre meg kjent med POSIX regex også (håper egentlig jeg slipper å bruke det i praksis): #include <regex.h> #include <stdio.h> #include <malloc.h> #include <string.h> int main() { char *htm = "Dette er en linje <a href=\"index.html\">link1</a> Windows er ett \"stabilt\" OS <a href=\"meny.htm\"> Link2</a>" "mer piss om at windows suger"; // Kompiler regulært uttrykk regex_t reLink; if (regcomp(&reLink, "<a href=\"([^\"]+)\">[^<]+</a>", REG_EXTENDED)) { fprintf(stderr, "No workee\n"); return 1; } // Utfør den første matchen regmatch_t m[2]; // Ett match-objekt for hele matchen, og ett for submatch (selve linken) int res = regexec(&reLink, htm, 2, m, REG_NOTBOL); // 0 betyr suksess char *scratch = NULL; // Buffer while (!res && m[0].rm_so != -1 && m[1].rm_so != -1) { // rm_so betyr start av match, rm_eo slutt av match size_t sz = m[1].rm_eo - m[1].rm_so + 1; // Størrelse på link + terminerende null scratch = realloc(scratch, sz); // Øk buffer om nødvendig strncpy(scratch, htm + m[1].rm_so, sz - 1); // Kopier over link scratch[sz - 1] = 0; // Terminer printf("Got me one ma: %s\n", scratch); htm += m[0].rm_eo; // Fortsett forbi match res = regexec(&reLink, htm, 2, m, 0); } free(scratch); regfree(&reLink); // Frigjør ressurser return 0; } Ser ut til å funke for meg, men ikke skyt meg om det er noen subtile bugs :] Fant forresten en bra side (tror jeg): http://www.mit.edu:8001/afs/athena.mit.edu...ml/regex_7.html Endret 10. mai 2004 av A_N_K Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå