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 | 容器类,保存子正则表达式匹配的字符序列. |
头文件是<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);
可以参考官方文档:http://www.gnu.org/software/libc/manual/html_node/Regular-Expressions.html#Regular-Expressions RE2 另外一个强大的正则表达式库就是RE2,它快速、安全,线程友好,是PCRE、PERL和python等回溯正则表达式引擎(backtracking regular expression engine)的一个替代品。RE2 支持 linux 和绝大多数的 Unix 平台。 使用起来也很简单,github:https://github.com/google/re2C++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));