HTML-Seite parsen

H

hegelbock

Grünschnabel
Hallo,

ich habe vor, ein Programm zu schreiben, welches mir eine HTML-Seite nach Links und verschiedenen Tags durchparst, und diese in einer Variable speichert.
Das parsen will ich mit einer Regex erledigen, doch leider habe ich keine Ahnung wie das in C++ funktionieren soll. Habe zwar mal gegooglet und regex++ gefunden, doch irgendwie steige ich da nicht durch.


Mein Ziel ist es, das ich einfach die HTML-Seite als string habe, dann eine regex drüberlaufen lasse, und überall da wo die Regex zutrifft, dieser Teil soll dann in ein array gespeichert werden. (siehe http://de3.php.net/manual/en/function.preg-match.php)
Wie könnte das funktionieren?

Des Weiteren hätte ich noch gerne ein Klasse, welche mir eine url als string, in ihre einzelne Bestandteile unterteilt und in ein array schreibt. Wisst ihr da was? (siehe http://de3.php.net/manual/en/function.parse-url.php ) :D

Ich hoffe ihr könnt mir weiterhelfen.
Grüsse Hegelbock
 
Code:
#include <sys/types.h>
#include <regex.h>

int regcomp(regex_t *preg, const char *regex, int cflags);
int regexec(const  regex_t  *preg,  const  char *string, size_t nmatch,
                    regmatch_t pmatch[], int eflags);
size_t regerror(int errcode, const regex_t *preg, char *errbuf,  size_t
                        errbuf_size);
void regfree(regex_t *preg);

Nähere informationen zu Benutzung sind zu finden unter "man 3 regex"
 
pcre bietet hier auch sehr gute Möglichkeiten zur Nutzung von Perl-kompatiblen regulären Ausdrücken.
 
@Mµ*e^13.5_?¿
ok, nur wie benutze ich das jetzt?
Könntest du mir ein kleines Beispiel geben? Am Besten eins, bei dem ich einen string, eine expression und das resultarray übergebe. Und die Übereinstummgen dann im resultarray stehen. :hilfe2:
Danke schonmal.
 
Also ganz so einfach benutzt sich das nicht, ein Beispiel kann ich trotzdem geben.
Code:
#include <stdio.h>
#include <regex.h>

int main (int argc, char * argv[]) {
        int max_match = 10;
        char * regex;
        char * text;
        char errbuf[100];
        int result;
        regmatch_t pmatch[max_match];
        regex_t preg;

        if (argc > 2) {
                regex = argv[2];
                text = argv[1];
        }
        else {
                regex = "a";
                text = "Hallo Welt";
        }

        printf("regex: %s, string: %s\n", regex, text);

        result = regcomp(&preg, regex, 0);
        if (result != 0) {
                regerror(result, &preg, errbuf, sizeof(errbuf));
                printf("error:%s\n", errbuf);
                return 1;
        }
        result = regexec(&preg, text, max_match, pmatch, 0);
        if (result != 0) {
                regerror(result, &preg, errbuf, sizeof(errbuf));
                printf("error: %s\n", errbuf);
                return 1;
        }
        regfree(&preg);

        int i;
        for (i = 0; i < max_match; i++) {
                if (pmatch[i].rm_so != -1) {
                        printf("fundstelle: %d\n", i+1);
                        printf("start: %d, end: %d\n", pmatch[i].rm_so, pmatch[i].rm_eo);
                }
        }
        return 0;
}

Aber hör lieber auf theton und nimm pcre.
Das ist glaub ich eher, das, was du suchst, ausserdem gibt es da auch einen netten c++-wrapper.
 
GEIL! Das Script ist verdammt praktisch. VIELEN DANK!

Den C++ Wrapper habe ich bereits schon probiert, leider bekomme ich immer ein Fehler beim linken. Mal schaun ob ich das noch hinbekomme. Aber ansonsten nehm ich das Script, das reicht mir von der Funktionalität eigentlich.
 

Ähnliche Themen

wer kann mir anhand eines beispiels mein problem lösen

Zurück
Oben