- на шо тут вас с s/// на Си то?, vnp, 03:59 , 22-Июл-04 (1)
>зачем-то я стал править сорсы squida чтоб напрямую писал в mysql >(перловаго парсера не хватало, штоли?) >вот скажем так я выдерну server из url на Perl >(такая заморчка чтоб всякие ftp:\\login:pass@ftp-servak тоже ) >хитрее не придумалося... >s/^(ftp\:\/\/\w+\:\w+\@|\w+\:\/\/)([a-z0-9_\-\.]+[a-z]{2,5}).*$/$2/; > > >ну вот >а на Си-то как сделать то? >без встраивания перла в си ибо зря regcomp, regexec... man regex, в общем
- regexp конешно ищет но зачем изобретать самовар, vengrslon, 11:51 , 22-Июл-04 (2)
/* * Quick-n-dirty host extraction from a URL. Steps: * Look for a colon * Skip any '/' after the colon * Copy the next SQUID_MAXHOSTNAMELEN bytes to host[] * Look for an ending '/' or ':' and terminate * Look for login info preceeded by '@' */ char * urlHostname(const char *url) { LOCAL_ARRAY(char, host, SQUIDHOSTNAMELEN); char *t; host[0] = '\0'; if (NULL == (t = strchr(url, ':'))) return NULL; t++; while (*t != '\0' && *t == '/') t++; xstrncpy(host, t, SQUIDHOSTNAMELEN); if ((t = strchr(host, '/'))) *t = '\0'; if ((t = strchr(host, ':'))) *t = '\0'; if ((t = strrchr(host, '@'))) { t++; xmemmove(host, t, strlen(t) + 1); } return host; }
|