z = regcomp(®, (const char*)pattern, cflags);
if(z) //此處為 if(z != 0), 因為C語言裡0永遠為非(False), 任何非0值都為真(True)
{
regerror(z, ®, ebuf, sizeof(ebuf));
perror("reg1");
fprintf(stderr, "%s: pattern '%s'\n", ebuf, pattern);
reg_rtn_struct_var.rtn = 1;
reg_rtn_struct_var.pstart = -1;
reg_rtn_struct_var.pend = -1;
regfree(®);
return reg_rtn_struct_var;
}
/**
*
* reg 指向編譯後的正則表達式
* str 指向將要進行匹配的字符串
* pm str字符串中可能有多處和正則表達式相匹配, pm數組用來保存這些位置
* nmacth 指定pm數組最多可以存放的匹配位置數
*
* @return 函數匹配成功後,str+pm[0].rm_so到str+pm[0].rm_eo是第一個匹配的子串
* str+pm[1].rm_so到str+pm[1].rm_eo是第二個匹配的子串
* ....
*/
z = regexec(®, str, nmatch, pm, 0);
//沒有找到匹配數據
if(z == REG_NOMATCH)
{
reg_rtn_struct_var.rtn = 1;
reg_rtn_struct_var.pstart = -1;
reg_rtn_struct_var.pend = -1;
regfree(®);
return reg_rtn_struct_var;
}
else if(z) //if(z !=0)
{
perror("reg3");