免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 4486 | 回复: 10
打印 上一主题 下一主题

[C] 请问C语言里面有没有类似模式匹配的函数啊? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2003-05-04 20:21 |只看该作者 |倒序浏览
现在要用c语言作文件解析,觉得好繁琐啊,有没有好点的模式匹配(以前习惯用perl了)。
    譬如说aa=bb,如何提出后面的bb啊?:(

论坛徽章:
0
2 [报告]
发表于 2003-05-04 20:29 |只看该作者

请问C语言里面有没有类似模式匹配的函数啊?

man regex

论坛徽章:
0
3 [报告]
发表于 2003-05-04 20:32 |只看该作者

请问C语言里面有没有类似模式匹配的函数啊?

标准c库中没有
但是在glibc中有

就是楼上所说的那个

论坛徽章:
0
4 [报告]
发表于 2003-05-04 20:46 |只看该作者

请问C语言里面有没有类似模式匹配的函数啊?

真的有模式匹配啊
我现在还在用fgetc一个一个字符判断获取呢,累的喘不过气了!:(

论坛徽章:
0
5 [报告]
发表于 2003-05-04 20:52 |只看该作者

请问C语言里面有没有类似模式匹配的函数啊?

但是只是在unix平台上有
windows下是没有的(也许可能在网上可以找到这个库)

论坛徽章:
0
6 [报告]
发表于 2003-05-04 20:55 |只看该作者

请问C语言里面有没有类似模式匹配的函数啊?

我就是在unix下开发的:)
谢谢大家哦

论坛徽章:
0
7 [报告]
发表于 2003-05-04 21:05 |只看该作者

请问C语言里面有没有类似模式匹配的函数啊?

我查了一下,是不是就是用regexec的函数啊:)

论坛徽章:
0
8 [报告]
发表于 2003-05-04 21:13 |只看该作者

请问C语言里面有没有类似模式匹配的函数啊?

应该是regex函数吧

论坛徽章:
0
9 [报告]
发表于 2003-05-04 22:20 |只看该作者

请问C语言里面有没有类似模式匹配的函数啊?

可以帮我看看为什么会有错误吗?
他说rm_so 和rm_eo不是结构体的成员。

/* regex_test.c
* regular expression test in GNU C
*
* tested on redhat6.1
* gcc regex_test.c -o regex_test
*/

#include "stdio.h"
#include <string.h>;
#include <stdlib.h>;
#include <unistd.h>;
#include <sys/types.h>;
#include <regex.h>;

#define SUBSLEN 10
#define EBUFLEN 128 /* error buffer length */
#define BUFLEN 1024 /* matched buffer length */

int
main (int argc, char **argv)
{
FILE *fp;
size_t len; /* store error message length */
regex_t re; /* store compilned regular expression */
regmatch_t subs[SUBSLEN]; /* store matched string position */
char matched[BUFLEN]; /* store matched strings */
char errbuf[EBUFLEN]; /* store error message */
int err, i;

char string[] = "AAAAabaaababAbAbCdCd123123 11(123){12}";
char pattern[] = "(\\([0-9]+\\))(\\{[0-9]+\\}{1})$";

printf ("String : %s\n", string);
printf ("attern: \"%s\"\n", pattern);

/* compile regular expression */
err = regcomp (&re, pattern, REG_EXTENDED);

if (err)
{
len = regerror (err, &re, errbuf, sizeof (errbuf));
fprintf (stderr, "error: regcomp: %s\n", errbuf);
exit (1);
}
printf ("Total has subexpression: %d\n", re.re_nsub);

/* execute pattern match */
err = regexec (&re, string, (size_t)SUBSLEN, subs, 0);

if (err == REG_NOMATCH)
{
fprintf (stderr, "Sorry, no match ...\n";
regfree (&re);
exit (0);
}
else if (err)
{
len = regerror (err, &re, errbuf, sizeof (errbuf));
fprintf (stderr, "error: regexec: %s\n", errbuf);
exit (1);
}

/* if no REG_NOMATCH and no error, then pattern matched */
printf ("\nOK, has matched ...\n\n";
for (i = 0; i <= re.re_nsub; i++)
{
if (i == 0)
{
printf ("begin: %d, end: %d, ", subs.rm_so, subs.rm_eo);
}
else
{
printf ("subexpression %d begin: %d, end: %d, ",
i, subs.rm_so, subs.rm_eo);
}
len = subs.rm_eo - subs.rm_so;
memcpy (matched, string + subs.rm_so, len);
matched[len] = '\0';
printf ("match: %s\n", matched);
}

regfree(&re);
exit(0);
}

论坛徽章:
0
10 [报告]
发表于 2003-05-04 22:51 |只看该作者

请问C语言里面有没有类似模式匹配的函数啊?

没有人帮我吗?:(
无双兄弟呢:)
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP