C/C++ 简单的正则表达式使用方法
今天做题时候发现可以用正则表达式,简单记录一下 首先是一个网站可以方便的测试正则表达式的结果。
首先C/C++都可以使用一个regex 和regex.h 的库,但是有一点C的regex.h 只能在Linux用,而且regex.h 不支持\d 。
先简单介绍一下regex.h
int regcomp(regex_t *preg, const char *pattern, int cflags);
int regexec(const regex_t *preg, const char *string, size_t nmatch, regmatch_t pmatch[], int eflags);
size_t regerror(int errcode, const regex_t *preg,char *errbuf, size_t errbuf_size);
void regfree(regex_t *preg);
具体细节就不说了,直接看看用法得了。 首先 要先生成一个regex_t 类型的变量,就是用regex_t 定义一个变量,然后在编写一个正则表达式的模式即pattern 。这个都好说 ,结合上边的网站慢慢写就行了。 然后必须先使用regcomp 编译一下,regcomp 成功则返回0,失败返回其他值。 ,regcomp 的几个参数分别是:
rege x是一个字符串,它代表将要被编译的正则表达式;preg 指向一个声明为regex_t的数据结构,用来保存编译结果;cflags 决定了正则表达式该如何被处理的细节。 cflags 有下面几种选择:
REG_EXTENDED | Use Extended Regular Expressions. |
---|
REG_ICASE | Ignore case in match. | REG_NOSUB | Report only success/fail in regexec(). | REG_NEWLINE | Change the handling of newline characters, as described in the text. |
regcomp 是第一步,然后就可以使用正则表达式进行匹配了。
直接调用regexec 函数函数的返回值可以用来判断字符串中有多少匹配的子串。 regexec 的几个参数的含义:
int regexec(const regex_t *preg, const char *string, size_t nmatch, regmatch_t pmatch[], int eflags);
preg 这就是刚才定义的regex_t 类型的变量的地址; -string 需要进行匹配的字符串;nmatch 告诉函数regexec()最多可以把多少个匹配结果填充到pmatch数组中;pmatch[] 一个返回匹配子串信息的数组;eflags 有两个选项
REG_NOTBOL | string中的首字符不是行的开头,所以模式中的特殊字符’^'不会匹配行string的开头 |
---|
REG_NOTEOL | 由于string的末字符不是行的末字符,所以模式中的特殊字符’$'不会匹配string的末尾 |
pmatch[] 是个结构体数组,结构体如下
typedef struct {
regoff_t rm_so;
regoff_t rm_eo;
} regmatch_t;
regerror() 能得到错误信息 regfree() 简易用来咋程序结束时释放regex_t
C++ 的看参考吧 写的更详细。
参考 1 2 3
|