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

Исходное сообщение
"Загадочное поведение ф-ции regexec"

Отправлено OF462M , 22-Апр-03 07:44 
Подскажите пожалуйста, в чем я(или не я) не прав? Цель этой небольшой тестовой программки - найти в строке все подстроки, удовлетворяющие заданному регулярному выражению и вывести на экран номера позиций начала и конца совпавших подстрок:

/************************
test.c
*************************/

#include <sys/types.h>
#include <regex.h>
#include <stdio.h>

main()
{
  regex_t regexpr;
  regmatch_t pm[3]; // предполагаем не более 3-х совпадений
  size_t n;
  int i;
  regcomp(®expr,"[abc]example",REG_EXTENDED);
  switch(regexec(®expr,"hsvvaexamplewqbcdbexamplebxjzhv",n,pm,0))
  {
  case REG_NOMATCH:
   printf("no match\n");
   break;
  default:
   printf("Matches: %i\n",n);
   for (i=0;i<=n-1;i++)
   {
    printf("[%i]",pm[i].rm_so);
    printf("[%i]\n",pm[i].rm_eo - 1);
   }
  }
  regfree(®expr);
  return 0;
}

stat# g++ -o test test.c
stat# ./test
Matches: 1
[4][11]

такой вот результат..  
Второе совпадение не находится.


Содержание

Сообщения в этом обсуждении
"Загадочное поведение ф-ции regexec"
Отправлено pth , 22-Апр-03 22:46 
Вроде regexec ведет себя правильно:

pmatch[0] - все совпадение
pmatch[1] - 1-е выражение в скобках
pmatch[2] - 2-e  -"-                и т.д.