免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12345
最近访问板块 发新帖
楼主: fwizard
打印 上一主题 下一主题

[C] 如何在C语言中巧用正则表达式 [复制链接]

论坛徽章:
0
41 [报告]
发表于 2009-11-02 14:56 |只看该作者
原帖由 清汤挂面 于 2007-5-9 11:10 发表
这个对汉字的支持很不好,差点被其给害了

不能滥用正则表达式,各种字符集下很可能不能处理多国文字。

我们一般只用于词法分析。

论坛徽章:
0
42 [报告]
发表于 2009-11-02 14:59 |只看该作者
原帖由 liaonianbo 于 2006-12-1 14:11 发表
如果需要做类似vi中如下替换  s/\([a-z]\+\)\([0-9]\+\)/\1,\1,\2/g

分两步做。
1:使用正则表达式检索目标。
2:使用替换函数将目标替换成结果。

论坛徽章:
0
43 [报告]
发表于 2009-11-02 15:01 |只看该作者
原帖由 zhhui2000 于 2008-1-2 08:48 发表
感谢分享,哪儿有开源的库就好了,什么环境下都可用。

LINUX,UNIX自带,无需另外的库。

论坛徽章:
0
44 [报告]
发表于 2009-11-02 15:10 |只看该作者
原帖由 ExclusivePig 于 2009-9-15 14:44 发表



跪求高手继续解释。。。我目前在用prce库,但总是只能匹配一个结果,对于多个匹配无法得到,我用的是pcre_compile,和prce_exec

给你一个程序吧,把环境变量里的$展开:


  1. static char env_src[]="\\$[{(]{0,1}([A-Za-z_][0-9A-Za-z_]*)[})]{0,1}";
  2. int substitute_env(char *line)
  3. {
  4. char env[256];
  5. char *p=line,*envp,*getenv();
  6. regmatch_t pmatch[REGNUM];
  7. int i;
  8.         if(!line) return 0;
  9.         while(!(i=regexec(&env_rp,p,REGNUM,pmatch,0))) {  //匹配多个
  10.                for(envp=p+pmatch[1].rm_so;envp<p+pmatch[1].rm_eo;envp++) {
  11.                                 env[i++]=*envp;
  12.                       }
  13.                  env[i]=0;
  14.                  envp=getenv(env);
  15.                 if(!envp) envp=".";
  16.                 p=strsubst(p+pmatch[0].rm_so, pmatch[0].rm_eo - pmatch[0].rm_so,envp);//p指向替换后的地址,下一轮从此开始继续匹配
  17.            }
  18.             return 0;
  19. }
复制代码


唉,这问题也问?能匹配1个就能匹配多个,程序处理呗。

[ 本帖最后由 yulihua49 于 2009-11-2 15:21 编辑 ]
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP