Регулярное выражение в C (PCRE) - PullRequest
0 голосов
/ 25 июля 2011


Я пытаюсь написать простую программу, которая находит все текстовые файлы на веб-странице HTML.
Я использую C с libcurl (для загрузки страницы из Интернета) и PCRE для сканирования страницы.

Я использую следующий шаблон - /\w+.txt/g и следующий код -

if(htmlContent == NULL) return;
char pattern[] = "/\\w+.txt/g";
const char *error;
int erroffset, ovector[OVECCOUNT], htmlLength = (int)(sizeof(htmlContent) / sizeof(char));
pcre *re = pcre_compile(pattern,0,&error,&erroffset,NULL);
if (re == NULL) {
    printf("PCRE compilation failed at offset %d: %s\n", erroffset, error);
    return;
}

int rc = pcre_exec(re,NULL,htmlContent,htmlLength,0,0,ovector,OVECCOUNT);
if(rc < 0) {
    pcre_free(re);
    return;
}
if (rc == 0)
{
    rc = OVECCOUNT/3;
    printf("ovector only has room for %d captured substrings\n", rc - 1);
}

int i;
for (i = 0; i < rc; i++)
{
    char *substring_start = htmlContent + ovector[2*i];
    int substring_length = ovector[2*i+1] - ovector[2*i];
    printf("%2d: %.*s\n", i, substring_length, substring_start);
}

Я получаю ноль результатов при выполнении кода (кстати, этот код только из обратного вызова curl)

1 Ответ

0 голосов
/ 30 ноября 2013

Шаблон должен быть "\\w+\\.txt\\b". \b остановит сопоставление шаблона foo.txtbar.

...