【正则表达式】【? [] () | 组合使用】【Linux C】
来源:互联网 发布:mysql事务回滚 原理 编辑:程序博客网 时间:2024/04/30 17:02
^[a-zA-Z]+_(replace[0-9]?_)?(bak|old|old2|NG)$
匹配
XXX_bak
XXX_old
XXX_old2
XXX_replace_NG
XXX_replace2_NG
XXX_replace_old
http://baike.baidu.com/view/94238.htm
1、POSIX函数库Linux regex.h
2、PCRE (http://www.pcre.org)
PCRE的名字就说明了是Perl Compatible,熟悉Perl、PHP的人使用起来完全没有问题。PCRE有非常丰富的使用说明和示例代码(看看pcredemo.c就能明白基本的用法),下面的程序只是把上面regex改为pcre。
http://blog.csdn.net/sahusoft/article/details/4196342
3、pcre++
pcre++(http://www.daemon.de/PCRE)对pcre做了c++封装,使用起来更加方便。
4、oniguruma
还有一个正则表达式的库oniguruma(http://www.geocities.jp/kosako3/oniguruma/),对于东亚文字支持比较好,开始是用在ruby上,也可用于C++,是日本的开发人员编写的。大多数人都不会用到,也就不做介绍了。如果有疑问可以通过email来讨论它的用法。
5、Regular Expression的内部实现
关于Regular Expression的实现,用到了不少自动机理论(Automata Theory)的知识,有兴趣的可以找这方面的资料来看,这本书“ Introduction to Automata Theory, Languages, and Computation”写的很好,编译原理的书也有这方面的内容。
#include <stdio.h>#include <string.h>#include <regex.h>#define SUBSLEN 10 /* sub mathced string buffer len*/#define EBUFLEN 128 /* err buffer */#define BUFLEN 1024 /* .......buffer.. */
int match_specifiedpattern(char* szSrc){size_t len;regex_t re;regmatch_t subs [SUBSLEN];char szmatched[BUFLEN];char szerrbuf[EBUFLEN];int err, i;//char szSrc[] = "XXX_bak";char szPattern[] = "^[a-zA-Z]+_(replace[0-9]?_)?(bak|old|old2|NG)$";// complieerr = regcomp(&re, szPattern, REG_EXTENDED);if(err){len = regerror(err, &re, szerrbuf, sizeof(szerrbuf));printf("error: regcomp: %s\n", szerrbuf);return 1;}printf("Total has subexpression: %d\n", re.re_nsub);// matcherr = regexec(&re, szSrc, (size_t) SUBSLEN, subs, 0);// failif (err == REG_NOMATCH){printf("Sorry, no match ...\n");regfree(&re);return 0;}else if(err){len = regerror(err, &re, szerrbuf, sizeof(szerrbuf));printf("error: regexec: %s\n", szerrbuf);regfree(&re);return 1;}// successprintf("\nOK, has matched ...\n\n");for (i = 0; i <= re.re_nsub; i++) {len = subs[i].rm_eo - subs[i].rm_so;if (i == 0){printf ("begin: %d, len = %d ", subs[i].rm_so, len);}else{printf("subexpression %d begin: %d, len = %d ", i, subs[i].rm_so, len); }memcpy (szmatched, szSrc + subs[i].rm_so, len);szmatched[len] = '\0';printf("match: %s\n", szmatched);}regfree(&re); return 0;}
- 【正则表达式】【? [] () | 组合使用】【Linux C】
- Linux c 使用正则表达式
- linux c 使用正则表达式
- linux C 中使用正则表达式
- linux c下使用正则表达式
- 正则表达式(linux/C++)
- linux c 正则表达式
- linux c 正则表达式
- linux C正则表达式
- linux c 正则表达式
- linux c正则表达式
- linux C 正则表达式
- 正则表达式appendReplacement appendTail组合使用
- linux下的C中正则表达式的使用
- linux c 语言中使用正则表达式pcre
- linux C 中使用正则表达式(转)
- Linux下C语言正则表达式使用详解
- linux c 正则表达式基础
- 美国天才黑客自杀:构建知识共享的世界
- C# 使用微软的Visual Studio International Pack 类库提取汉字拼音首字母
- 数据结构实验之栈四:括号匹配 字符串匹配
- js 实现table 分页功能
- char tchar wchar_t WCHAR LPCTSTR LPCWSTR
- 【正则表达式】【? [] () | 组合使用】【Linux C】
- ORACLE存储过程(四)之游标
- C语言获取系统时间的几种方式
- 黑马程序员_银行业务管理系统
- android Activity 变成Dialog的方法
- 总结——第一次写文档
- stm32篇--定时器和PWM
- 骑车去追风
- 去掉tppabs冗余代码