Linux C 正则表达式运用(regex.h)

一个段程序用到了中的正则表达式来识别字符串,写个小博客给自己记录一下。

也是查过才发现原来C语言也可以直接使用库函数来进行字符串匹配,当然由于不是标准的C语言库函数,所以只在linux系统中有,Windows的用户可能就得另想办法了。

中有四个函数,分别是:

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与regmatch_t。

四个函数对应着运用正则表达式进行字符串匹配的四个步骤。

1.首先是regcomp函数对正则表达式进行编译,当然得先找到函数需要的参数:

regex_t类型:包含size_t类型的成员re_nsub,英文解释为Number of parenthesised subexpressions;

char*类型:指向要匹配的模式字符串的指针;

int类型:可省略或多选的参数,包括

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成功则返回0,失败返回其他值。

2.regexec函数执行字符串匹配,匹配成功返回0值,失败返回其他值。

函数包括5个参数:

regex_t类型的preg参数第一步已经介绍;

string参数为要进行匹配的目标字符串;

nmatch为regmatch_t类型的pmatch数组中元素的个数;

pmatch数组为存储匹配信息的数组,其中元素为regmatch类型至少包含:

regoff_t rm_so Byte offset from start of string to start of substring.
regoff_t rm_eo Byte offset from start of string of the first character after the end of substring.
eflags:

REG_NOTBOL:string中的首字符不是行的开头,所以模式中的特殊字符'^'不会匹配行string的开头;

REG_NOTEOL:由于string的末字符不是行的末字符,所以模式中的特殊字符'$'不会匹配string的末尾;

3.regerror函数很好理解,可以不用;

4.regfree函数则为将编译的模式字符串释放为正常字符串;




你可能感兴趣的:(linux,c,编程)