C语言使用正则表达式

摘要:
正则表达式是能极大地提高工作效率的工具,使用过Linux下各种具备RE特性的工具的人一定对此深有感触。很多语言都支持RE,用的最多的当然是脚本,其中以perl最盛。不过,用C语言来用RE不是很多见,但是有时候也很有用,我最近也是看到别人说道这个,所以搜了一些资料加上自己的体会来说一说RE在C语言里的应用。C语言本身不具备RE特性,但是有很多库,在Linux下你可以很方便的使用regex.h提供的库。

http://blog.chinaunix.net/uid-479984-id-2114941.html

C语言使用正则表达式

据说一个好的程序员是会使用DB和Regular Expression的程序员,可见两者是多么重要。正则表达式是能极大地提高工作效率的工具,使用过Linux下各种具备RE特性的工具的人一定对此深 有感触。很多语言都支持RE,用的最多的当然是脚本,其中以perl最盛。不过,用C语言来用RE不是很多见,但是有时候也很有用,我最近也是看到别人说 道这个,所以搜了一些资料加上自己的体会来说一说RE在C语言里的应用。C语言本身不具备RE特性,但是有很多库,在Linux下你可以很方便的使用 regex.h提供的库。我先贴一段代码展示一下RE在C语言里是怎么用的

1 #include<stdio.h>
2 #include<sys/types.h>
3 #include<regex.h>
4 #include<memory.h>
5 #include<stdlib.h>
6
7 int main(){
8
9 char *bematch = "hhhericchd@gmail.com";
10 char *pattern = "h{3,10}(.*)@.{5}.(.*)";
11 char errbuf[1024];
12 char match[100];
13 regex_t reg;
14 int err,nm = 10;
15 regmatch_t pmatch[nm];
16
17 if(regcomp(&reg,pattern,REG_EXTENDED) < 0){
18 regerror(err,&reg,errbuf,sizeof(errbuf));
19 printf("err:%s ",errbuf);
20 }
21
22 err = regexec(&reg,bematch,nm,pmatch,0);
23
24 if(err == REG_NOMATCH){
25 printf("no match ");
26 exit(-1);
27 }else if(err){
28 regerror(err,&reg,errbuf,sizeof(errbuf));
29 printf("err:%s ",errbuf);
30 exit(-1);
31 }
32
33 for(int i=0;i<10 && pmatch[i].rm_so!=-1;i++){
34 int len = pmatch[i].rm_eo-pmatch[i].rm_so;
35 if(len){
36 memset(match,'

免责声明:内容来源于网络,仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇交叉验证初识网站插入视频代码下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

C++雾中风景番外篇4:GCC升级二三事

最近将手头上负责的项目代码从GCC 4.8.2升级到了GCC 8.2。(终于可以使用C++17了,想想后续的开发也是很美好啊~~)不过这个过程之中也遇到了一些稀奇古怪的问题,在这里做一个简单的记录,希望后续有同学遇到类似的问题能作为参考。 1. error: unable to find string literal operator 'operator"...

C++编译遇到参数错误(cannot convert parameter * from 'const char [**]' to 'LPCWSTR')

转:http://blog.sina.com.cn/s/blog_9ffcd5dc01014nw9.html 前面的几天一直都在复习着被实习落下的C++基础知识。今天在复习着上次创建的窗口程序时,出现了一个错误,百思不得其解。因为是同样的代码,上次的都能顺利的通过编译,这次自己新建了一个工程结果就有一个错误出现,是在调用Create()函数时,传参数出现问...

java之endwith()方法以及正则表达式匹配中文

今天写程序的时候遇到判断需要使用多个if(){}else{}语句,观察了一下需要判断的条件,发现判断的条件可以变为对条件最后几个汉字的判断,就想用正则表达式来对汉字判断,写完后,想到可以用Java中String类的endwith()方法来对汉字实现匹配,例如 String str="世界你好我喜欢编程"; if(str.endwith("编程")){   ...

C++星号的含义

[转载] [http://blog.sina.com.cn/s/blog_4a50d85b0100uk3c.html]   1、乘法运算符   2、定义指针 int *p = 0; 还是 int* p = 0;? 后一种比较容易这样理解:定义了一个变量p,它是指针型的(更详细一点,是指向int的指针型),相比而言,前面一种定义似乎是定义了*P这个奇...

c语言实现灰度图转换为二值图

将上篇得到的灰度图转换为二值图,读取像素数据,低于某一值置0,否则设置为255,为得到更好的效果不同图片应采用不同的值 1 /* 2 2015年6月2日11:16:22 3 灰度图转换为二值图 4 blog:http://www.cnblogs.com/wd1001/ 5 */ 6 #include<stdio.h>...

C++解析(30):关于指针判别、构造异常和模板二义性的疑问

0.目录 1.指针的判别 2.构造中的异常 2.1 如果构造函数中抛出异常会发生什么? 2.2 如果析构函数中抛出异常会发生什么? 3.令人迷惑的写法 3.1 模板中的二义性 3.2 函数异常声明 4.小结 1.指针的判别 面试问题:编写程序判断一个变量是不是指针。 指针的判别:拾遗: C++中仍然支持C语言中的可变参数函数 C...