ciao,
avrei la necessità di estrarre i link contenuti in una pagina HTML senza scomodare le espressioni regolari in quanto non ho a disposizione una libreria; esiste una qualche implementazione già fatta?
grazie
ciao,
avrei la necessità di estrarre i link contenuti in una pagina HTML senza scomodare le espressioni regolari in quanto non ho a disposizione una libreria; esiste una qualche implementazione già fatta?
grazie
Se cerchi qualche implementazione già fatta cerchi una libreria
Comunque non è una cosa banale.
"Quid enim est, quod contra vim sine vi fieri possit?" - Cicerone, Ad Familiares
codice:char *ps = &HTML_Txt[0]; // Il buffer del testo in entrata. char *pLinkStr = &buf[0]; // Un buffer preimpostato che riceverà il link. if (ps) { while (*ps) { if ( *ps == 'h' && *++ps == 'r' && *++ps == 'e' && *++ps == 'f' ) { while (*ps != '"') // Scarta '=' spazi e virgolette... ps++; while (*ps == '"') // Copia la stringa di testo del link. *pLinkStr++ = *ps++; } ps++; } }
...è solo una idea, non so neppure se funziona, poi bisogna aumentare i controlli per verificare che ad ogni incremento di ps non si incontri il terminatore nullo.
Ultima modifica di Paulin; 12-11-2014 a 13:08
Tecnicamente href può essere usato in tag diversi da a, inoltre non necessariamente con tiene un link.
Comunque a questo punto tanto vale usare un po' di funzioni di libreriaedit. volendo si può trasformare in una funzione à la strtokcodice:#include <stdio.h> #include <string.h> int main(void) { char *input = "<a href=\"...\">asd</a><a href=\",,,\"></a>", *init, *end, buff[256]; int len; init = strstr(input, "href"); while(init!=NULL) { init = strchr(init, '"')+1; end = strchr(init, '"'); len = end-init; strncpy(buff, init, len); buff[len] = '\0'; printf("%s\n", buff); init = strstr(end, "href"); } return 0; }
Ultima modifica di Scara95; 12-11-2014 a 14:02
"Quid enim est, quod contra vim sine vi fieri possit?" - Cicerone, Ad Familiares
grazie per gli esempi, vedo che anche senza scomodare le espressioni regolari si riesce ad estrarre i link, li proverò entrambi.
Un dubbio: che differenza vi è tra indirizzi del tipo http:\\www.miosito.com e http:\\miosito.com ????
grazie
Che puntano a due domini diversi... (anche se molti aggiungono un qualche genere di redirect)
(per inciso, negli URL gli slash sono in avanti... http://, non http:\\)
Amaro C++, il gusto pieno dell'undefined behavior.
ops, hai ragione, ho scritto senza pensarci: effettivamente facendo ping www.google.it e google.it si ottengono due IP diversi però forse si potrebbe avere stesso IP ed n domini diversi
grazie
Certo, sono i cosiddetti "virtual hosts"... Ma che c'entra con la domanda iniziale?
Amaro C++, il gusto pieno dell'undefined behavior.