http://see.xidian.edu.cn/cpp/html/1428.html
上述网址有关于C的正则匹配用法,或者百度、google搜索“C正则”也能找到为数不多的用法介绍。这里补充一点,就是C的正则表达式传递进去的时候,不可以加//来包围正则,自然也不支持如/[a-z]+/i,它是通过regcomp进行编译的,如果要忽略大小写,编译时设置标记为REG_ICASE即可。
另外还要注意正则表达式中如果要包括"-",那么把它写在最后,或最前,否则会当成a-z这种范围来计算的,regcomp编译无法通过,会提示"nvalid range end”,当然这个信息要通过regerror 来获取。
下面附上可用的代码:
#include <stdio.h> #include <sys/types.h> #include <string.h> #include <errno.h> #include <regex.h> int main(int argc, char **argv) { int errcode, status, i, j; int cflags = REG_EXTENDED | REG_ICASE; regmatch_t pmatch[3]; const size_t nmatch = 3; regex_t reg; const char *pattern = "([a-z0-9._-]+)@([a-z0-9._-]+)"; char *buf = "Canlynet_sky-Dc123.net@Yahoo-git.com.cn"; char err_buf[128] = {0}; if (0 != (errcode = regcomp(®, pattern, cflags))) { regerror (errcode, ®, err_buf, sizeof err_buf); printf("Error while regcomp: %s\n", err_buf); return -1; } status = regexec(®, buf, nmatch, pmatch, 0); if (REG_NOMATCH == status) printf("No Match\n"); else if (0 == status) { printf("Match:\n"); for (j=0; j<3; j++) { printf("[%d]:", j+1); for (i=pmatch[j].rm_so; i<pmatch[j].rm_eo; ++i) putchar(buf[i]); printf("\n"); } } regfree(®); return 0; }