引自: http://blog.csdn.net/sahusoft/archive/2009/05/18/4196342.aspx
#include
2 #include
3 #include
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[] = "111 这是由Linux C 匹配出来的内容 222"; /* 源字符串 */
19 char pattern [] = "(.*)"; /* 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 {
29 len = regerror(err, &re, errbuf, sizeof(errbuf));
30 printf("error: regcomp: %s\n", errbuf);
31 return 1;
32 }
33 printf("Total has subexpression: %d\n", re.re_nsub);
34 /* 执行模式匹配 */
35 err = regexec(&re, src, (size_t) SUBSLEN, subs, 0);
36 if (err == REG_NOMATCH)
37 { /* 没有匹配成功 */
38 printf("Sorry, no match ...\n");
39 regfree(&re);
40 return 0;
41 }
42 else if (err)
43 {
44 /* 其它错误 */
45 len = regerror(err, &re, errbuf, sizeof(errbuf));
46 printf("error: regexec: %s\n", errbuf);
47 return 1;
48 }
49
50 /* 如果不是REG_NOMATCH并且没有其它错误,则模式匹配上 */
51 printf("\nOK, has matched ...\n\n");
52 for (i = 0; i <= re.re_nsub; i++)
53 {
54 len = subs[i].rm_eo - subs[i].rm_so;
55 if (i == 0)
56 {
57 printf ("begin: %d, len = %d ", subs[i].rm_so, len); /* 注释1 */
58 }
59 else
60 {
61 printf("subexpression %d begin: %d, len = %d ", i, subs[i].rm_so, len);
62 }
63 memcpy (matched, src + subs[i].rm_so, len);
64 matched[len] = '\0';
65 printf("match: %s\n", matched);
66 }
67
68 regfree(&re); /* 用完了别忘了释放 */
69 return (0);
70 }
阅读(1468) | 评论(0) | 转发(0) |