c语言 正则表达式 IP地址

本文通过一个具体的示例介绍了如何使用C语言中的正则表达式库进行字符串模式匹配。示例中演示了如何定义正则表达式、编译并执行匹配过程,以及如何获取匹配结果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 1 #include <stdio.h>
 2 #include <string.h>
 3 #include <regex.h>
 4 
 5 #define SUBSLEN 10              /* 匹配子串的数量 */
 6 #define EBUFLEN 128             /* 错误消息buffer长度 */
 7 #define BUFLEN 1024             /* 匹配到的字符串buffer长度 */
 8 
 9 int main()
10 {
11 size_t          len;
12 regex_t         re;             /* 存储编译好的正则表达式,正则表达式在使用之前要经过编译 */
13 regmatch_t      subs [SUBSLEN];     /* 存储匹配到的字符串位置 */
14 char            matched   [BUFLEN];     /* 存储匹配到的字符串 */
15 char            errbuf    [EBUFLEN];    /* 存储错误消息 */
16 int             err, i;
17 
18 char            src       [] = "sdafsdfsdf52.23.11.43sdafsdfsdfasdfa";    /* 源字符串 */
19 char            pattern   [] = "([0-9]{1,3}[.]){3}[0-9]{1,3}";    /* pattern字符串 */
20 
21 printf("String : %s\n", src);
22 printf("Pattern: \"%s\"\n", pattern);
23 
24 /* 编译正则表达式 */
25 err = regcomp(&re, pattern, REG_EXTENDED);
26 
27 if (err) {
28 len = regerror(err, &re, errbuf, sizeof(errbuf));
29 printf("error: regcomp: %s\n", errbuf);
30 return 1;
31 }
32 printf("Total has subexpression: %d\n", re.re_nsub);
33 /* 执行模式匹配 */
34 err = regexec(&re, src, (size_t) SUBSLEN, subs, 0);
35 
36 if (err == REG_NOMATCH) { /* 没有匹配成功 */
37 printf("Sorry, no match ...\n");
38 regfree(&re);
39 return 0;
40 } else if (err) {  /* 其它错误 */
41 len = regerror(err, &re, errbuf, sizeof(errbuf));
42 printf("error: regexec: %s\n", errbuf);
43 return 1;
44 }
45 
46 /* 如果不是REG_NOMATCH并且没有其它错误,则模式匹配上 */
47 printf("\nOK, has matched ...\n\n");
48 for (i = 0; i <= re.re_nsub; i++) {
49 len = subs[i].rm_eo - subs[i].rm_so;
50 if (i == 0) {
51 printf ("begin: %d, len = %d  ", subs[i].rm_so, len); /* 注释1 */
52 } else {
53 printf("subexpression %d begin: %d, len = %d  ", i, subs[i].rm_so, len); 
54 }
55 memcpy (matched, src + subs[i].rm_so, len);
56 matched[len] = '\0';
57 printf("match: %s\n", matched);
58 }
59 
60 regfree(&re);   /* 用完了别忘了释放 */
61 return (0);
62 }
View Code

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值