2012-08-16 1 views
4

Я leraning PCRE, и я не понимаю, почему смещение вектора должно быть кратно 3. Это из pcredemo.c (rc является результатом pcre_exec()):PCRE - вектор смещения, кратный 3?

/* The output vector wasn't big enough */ 

if (rc == 0) { 
    rc = OVECCOUNT/3; 
    printf("ovector only has room for %d captured substrings\n", rc - 1); 
} 

/* Show substrings stored in the output vector by number. Obviously, in a real 
* application you might want to do things other than print them. */ 

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

Мне кажется, что ovector магазины str1_start, str1_end, str2_start, str2_end, ..., поэтому массив может содержать строки OVECCOUNT/2. Почему это OVECCOUNT/3?

спасибо.

ответ

4

The manual:

Первые две трети вектора используется для передачи обратно захваченные подстроки, каждый подстроку с помощью пары целых чисел. Оставшаяся третья часть вектора используется в качестве рабочего пространства pcre_exec() при сопоставлении захвата подшаблонов и недоступна для передачи назад информации. Число, прошедшее в ovecsize, должно всегда быть кратным из трех. Если нет, то округляется.

+0

Я еще не получил это в ручном режиме. Лучше RTFM в следующий раз. Спасибо. – woky