Ман:
int pcre_exec(const pcre *code, const pcre_extra *extra,
const char *subject, int length, int startoffset,
int options, int *ovector, int ovecsize);
...
ovecsize Number of elements in the vector (a multiple of 3)Почему должен быть кратен 3-м, если обработка ведется по парам (взял из примеров):
count = pcre_exec (re, NULL, (char *) str, 4, 0, 0, ovector, 30);
// выполнение сопоставления с образцом
if (!count){ // если нет совпадений
cout << "No match\n";
}
else{
//вывод пар {начало, конец} совпадения
for (int c = 0; c < 2 * count; c += 2){
if (ovector[c] < 0){ // или <unset> для несопоставившихся подвыражений
cout << "<unset>\n";
}
else{
cout << ovector[c] << "/" << ovector[c + 1] << "\n";
}
}
}
http://webcode.ru/re/pcre/
ну тут вроде сказано что
В последних двух аргументах нужно указать ссылку на массив целых чисел и его длину.
хтя pcre серьено не пользую, плохой код имхо
пфу блин, не то скопировал..примеров нормальных полно, на *ix.opennet.ru както сайт такой каричневенький.
вот по нем pcre учил.
>http://webcode.ru/re/pcre/
>ну тут вроде сказано что
>В последних двух аргументах нужно указать ссылку на массив целых чисел и
>его длину.Про аргументы я всё понял сразу. Я одного не понял почему длина массива должна быть кратна трём, а используются для возврата пары(начало/конец)
>
>хтя pcre серьено не пользую, плохой код имхоА что используешь?
>почему длина массива должна быть кратна трём, а используются для возврата
>пары(начало/конец)Походу 2/3 массива используется для возврата, а 1/3 - для врЕменных данных самой pcre_exec.
Криво, конечно.