>Мужики, ну что? Никто не программил с регекспами на Си что ли?
>
Ну я программил :). Я вообще перл не признаю :)
Просто если
>Пишу с помощью regcomp() и regexec()
то вопросов
> А как то же самое сделать на Си?
возникать не должно.
Ну а если "Собираюсь использовать regcomp() и regexec()", тогда все что
вам нужно просто прочесть man. У меня это man 3 regex и man 7 regex
Откуда сразу ясно, что если:
1) строка="aaaaa", pattern="a" (или "(a)" или [a]), то найдется "a"
2) строка="aaaaa", pattern="a+" (или (a+) или [a]+), то найдется "aaaaa"
Пример:
#include <sys/types.h>
#include <regex.h>
#include <stdio.h>
int match(const char *string, char *pattern, regmatch_t *reg) {
int status;
regex_t re;
size_t s;
(!reg) ? (s=0) : (s=1);
if(regcomp(&re, pattern, REG_EXTENDED) != 0) return 0;
status = regexec(&re, string, s, reg, 0);
regfree(&re);
return !status;
}
void print_matched(char *s,char *p, regmatch_t reg) {
int i;
printf("Patern '%s' found in '%s', matched: '",p,s);
for (i=reg.rm_so; i<reg.rm_eo; i++) putchar(s[i]);
printf("', rest of string: '%s'\n",s+i);
putchar('\n');
}
int main() {
regmatch_t rg;
char str[]="aaaaa";
char ptr[]="a";
char ptr2[]="a+";
if (match(str,ptr,&rg)) print_matched(str,ptr,rg);
if (match(str,ptr2,&rg)) print_matched(str,ptr2,rg);
}