windows 下 GNU 正则表达式的安装与使用, 参考 <张公子>
https://www.cnblogs.com/mrneo/p/5856480.html
正则表达式字符串规范-参考
http://blog.csdn.net/csd_c_chen/article/details/78237600
#include <regex.h>
regcomp - 编译正则表达式
regexec - 匹配正则表达式
regfree - 释放正则表达式
int regcomp(regex_t *preg, const char *regex, int cflags);
preg - 输出参数, 保存编译结果
regex - 正则表达式的字符串
cflags - 0
return - success(0) error(非0)
int regexec(const regex_t *preg, const char *string, size_t nmatch,
regmatch_t pmatch[], int eflags);
preg - 输出参数, 保存编译结果
regex - 正则表达式的字符串
nmathc - sizeof (match) /sizeof (match[0])
pmatch - regmatch_t match[2] 一般声明一个数组存放匹配信息
cflags - 0
return - success(0) error(非0)
void regfree(regex_t *preg);
// 获取正则表达式编译错误信息
size_t regerror(int errcode, const regex_t* preg, char* errbuf, size_t errbuf_size);
errcode - 以上函数返回值
errbuf - 错误信息保存缓冲区
errbuf_size - 缓冲区大小
typedef struct {
regoff_t rm_so;
regoff_t rm_eo;
} regmatch_t;
regexec 匹配后pmatch数组的成员变量
<......href=" .............. ".......>
| |
1 1
rm_so rm_eo
|<-----len------->|
0 0
rm_so rm_eo
|
html
// regex : href="\s*\([^ >"]*\)\s*"
// html : ...href=" /software/download.html "...
// | |<-----match[1]--------->| |
// | rm_so rm_eo |
// |<-------------match[0]----------->|
// rm_so rm_eo
* - 重复前一个匹配项任意次
\( - 子表达式左边界
\) - 子表达式右边界
[^ >] - 任意除空格和大于号之外的字符
\w - 单词字符 [a-zA-Z_0-9]
\W - 非单词字符
\S - 非空白字符
\d - [0-9]
\D - [^0-9]