URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 7059
[ Назад ]

Исходное сообщение
"Объясните функцию pcre_exec. PCRE. С."

Отправлено Mr.Link , 21-Дек-07 12:21 
Ман:
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";
            }
         }
      }


Содержание

Сообщения в этом обсуждении
"Объясните функцию pcre_exec. PCRE. С."
Отправлено exn , 21-Дек-07 16:19 
http://webcode.ru/re/pcre/
ну тут вроде сказано что
В последних двух аргументах нужно указать ссылку на массив целых чисел и его длину.


хтя pcre серьено не пользую, плохой код имхо


"Объясните функцию pcre_exec. PCRE. С."
Отправлено exn , 21-Дек-07 16:23 
пфу блин, не то скопировал..

  примеров нормальных полно, на *ix.opennet.ru както сайт такой каричневенький.
вот по нем pcre учил.


"Объясните функцию pcre_exec. PCRE. С."
Отправлено Mr.Link , 21-Дек-07 17:41 
>http://webcode.ru/re/pcre/
>ну тут вроде сказано что
>В последних двух аргументах нужно указать ссылку на массив целых чисел и
>его длину.

Про аргументы я всё понял сразу. Я одного не понял почему длина массива должна быть кратна трём, а используются для возврата пары(начало/конец)

>
>хтя pcre серьено не пользую, плохой код имхо

А что используешь?


"Объясните функцию pcre_exec. PCRE. С."
Отправлено Michelnok , 22-Дек-07 15:50 
>почему длина массива должна быть кратна трём, а используются для возврата
>пары(начало/конец)

Походу 2/3 массива используется для возврата, а 1/3 - для врЕменных данных самой pcre_exec.

Криво, конечно.