0%

C使用正则

如题

  只说最有用最常用的。
  使用正则的时候涉及到两个东西:“模式”和“待匹配字符串”。”模式”就是那些常见的正则表达式字符串,但是放在程序里需要有个特定的格式去存储使用,否则直接使用字符串去匹配效率太慢。”待匹配字符串”就是你要筛选的原始信息了。
所以在C中使用正则需要先把人类可读的”模式”转换为regex模块看到的结构regex_t,这就是

1
int regcomp(regex_t *preg, const char *regex, int cflags);

干的事情,cflags就是控制转换的一些细节的。
然后就可以来做筛选匹配了

1
2
int regexec(const regex_t *preg, const char *string, size_t nmatch,
regmatch_t pmatch[], int eflags);

匹配的结果放在regmatch_t结构体中,nmatchpmathc[]共同控制最多匹配多少组,eflags还是控制一些细节问题。
结构体regmatch_t为:

1
2
3
4
typedef struct{
regoff_t rm_so; // 匹配到的开始位置
regoff_t rm_eo; // 匹配到的结束位置
} regmatch_t;

最后要释放掉正则的结构体:

1
void regfree(regex_t *preg);

当然还有错误信息:

1
2
size_t regerror(int errcode, const regex_t *preg, char *errbuf,
size_t errbuf_size);

好了,最简单的使用就是这些了,使用的话可以参考这个