пpимеp регуляpных выржения на Си (regex example)
Ключевые слова: regex, example, (найти похожие документы)
_ RU.LINUX (2:5077/15.22) ___________________________________________ RU.LINUX _
From : Vitaly E.Lavrov 2:5030/580 29 Nov 99 16:32:46
Subj : пpимеp регуляpных выржения на Си
________________________________________________________________________________
From: "Vitaly E.Lavrov" <lve@cit.aanet.ru>
Dema Olyenyov <Dema.Olyenyov@p11.f9.n5088.z2.fidonet.org> wrote:
>> > Если есть таковые.
>> Идём File: libc.info, Node: Regular Expressions
>> Тама есть POSIX REGEXP
> А не кинет ли кто-нибудь примерчик как использовать регулярные
> выражения на C. У меня немного не получается - оно как-то интересно
> компилит выражения...
Hу вот маленький пример.
-------------------------------------
#include <stdio.h>
#include <stdlib.h>
#include <regex.h>
#include <sys/socket.h>
#include <netinet/in.h>
#define MYREG1 "\\([0-9]*\\.[0-9]*\\.[0-9]*\\.[0-9]*\\)/\\([0-9]*\\)"
void regerr_prt(regex_t *preg,int err)
{
char buf[512];
regerror(err,preg,buf,sizeof(buf)-1);
printf(__FUNCTION__":%s\n",buf);
}
regmatch_t rm[16];
main(int argn,char **argv)
{
regex_t reg1;
int err,i,cntip;
char buf[512];
if((err=regcomp(®1,MYREG1,0))) {
regerr_prt(®1,err);
abort();
}
while(fgets(buf,sizeof(buf)-1,stdin)) {
if(buf[strlen(buf)-1] == '\n') buf[strlen(buf)-1]=0;
if(regexec(®1,buf,3,&rm[0],0)) continue;
{
char c;
int ipm;
buf[rm[1].rm_eo] = 0;
buf[rm[2].rm_eo] = 0;
inet_aton(&buf[rm[1].rm_so],(struct in_addr *)&ipr[cntip].inetnum);
ipr[cntip].inetnum = htonl(ipr[cntip].inetnum);
ipm=atoi(&buf[rm[2].rm_so]);
ipr[cntip].inetmask = 0xfffffffful << (32 - ipm);
cntip++;
buf[rm[i].rm_eo] = c;
}
}
regfree(®1);
return 0;
---------------
Виталий
--- ifmail v.2.14
* Origin: St. Petersburg State University of Aerospace In (2:5030/580@fidonet)