C++正则表达式匹配工具

因为要区分电话号码邮件等各种联系方式 ,所以想用正则表达式来匹配,但是又要做到windows和Linux兼容,所以查了一下,有RE2,glibc regex和C++ regex.
C++ regex
包含在头文件<regex>中,大致的接口有:
basic_regex 正则表达式对象,是一个通用的模板,有typedef basic_regex<char> regex 和 typedef basic_regex<char_t>wregex;
regex_match 将一个字符序列和正则表达式匹配
regex_search 寻找字符序列中的子串中与正则表达式匹配的结果,在找到第一个匹配的结果后就会停止查找
regex_replace 使用格式化的替换文本,替换正则表达式匹配到字符序列的地方
regex_iterator 迭代器,用来匹配所有 的子串 
match_results 容器类,保存正则表达式匹配的结果。
sub_match 容器类,保存子正则表达式匹配的字符序列.
参考官方文档: http://www.cplusplus.com/reference/regex/
使用起来还比较简单,但是由于我的Linux环境的gcc还是4.1.2,太老了,又没有权限升级,所以Linux版本只能使用glibc regex。如果想要linux支持的话,gcc 版本至少需要4.9.0。
glibc regex
头文件是<regex.h>,主要的接口如下:
// 将正则式编译成 regexec 使用的形式,preg 存储 regex 编译后的结果  
int  regcomp(regex_t *preg,  const   char  *regex,  int  cflags); 
// 匹配非空字符串和预编译好的正则式
int  regexec( const  regex_t *preg,  const   char  * string , size_t nmatch, regmatch_t pmatch[],  int  eflags); 
// 如果有错误发生,根据 errcode 得到相应的错误描述  
size_t regerror( int  errcode,  const  regex_t *preg,  char  *errbuf, size_t errbuf_size); 
// 释放预编译正则式的 buffer  
void  regfree(regex_t *preg);

RE2
另外一个强大的正则表达式库就是RE2, 它快速、安全,线程友好,是 PCRE PERL python 等回溯正则表达式引擎( backtracking  regular expression engine)的一个替代品。RE2 支持 linux  和绝大多数的 Unix 平台。
使用起来也很简单,github https://github.com/google/re2
C++API介绍: https://github.com/google/re2/wiki/CplusplusAPI,但是由于我的linux环境支持不了c++11,所以也只能放弃。贴个官网例子:
RE2 re("(\\w+):(\\d+)");
assert(re.ok());  // compiled; if not, see re.error();

assert(RE2::FullMatch("ruby:1234", re, &s, &i));
assert(RE2::FullMatch("ruby:1234", re, &s));
assert(RE2::FullMatch("ruby:1234", re, (void*)NULL, &i));
assert(!RE2::FullMatch("ruby:123456789123", re, &s, &i));
使用方式也是简单明了啊。










评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值