好的......让它与这个正则表达式一起工作:
const char * reg_exp = "^([a-z0-9])(([-a-z0-9._])*([a-z0-9]))*@([a-z0-9])"
"(([a-z0-9-])*([a-z0-9]))+(.([a-z0-9])([-a-z0-9_-])?";
我还不知道这个表达有多有效,但我很高兴在这个问题上取得一些进展。
C 模式匹配(正则表达式)的新手。我相信我试图找到我的问题的答案。
我正在尝试让一个简单的电子邮件模式匹配在我的注册模块中工作。由于我现在对其进行了编码,因此每次传递时它都无法匹配格式正确的电子邮件源。我在想,基于我非常有限的知识和理解,如果满足所有其他依赖项,以下代码应该可以工作。但是,这又是行不通的。任何帮助都感激不尽。
更新的示例代码:
#include <regex.h>
regex_t regex;
... //other proc vars
int r, e;
unsigned char buf[RESBUF];
char *source = "johnnydoe@cloudnine.com";
const char *reg_exp1 = "/^[-a-z0-9~!$%^&*_=+}{\'?]+(\.[-a-z0-9~!$%^&*_=+}{\'?]+)*@"
"([a-z0-9_][-a-z0-9_]*(\.[-a-z0-9_]+)*\.(aero|arpa|biz|com|coop|"
"edu|gov|info|int|mil|museum|name|net|org|pro|travel|mobi|[a-z][a-z])"
"|([0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}))(:[0-9]{1,5})?$/i";
const char *reg_exp2 = "\b[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}\b";
char proc[] = "create_user";
r = regcomp(®ex,reg_exp2,REG_EXTENDED);
if(r) {
sprintf(emessage,"REGEX COMPILE:Fail:%s:%s",proc,cgiRemoteAddr);
log_proc(ebs->r,emessage,TXLOG);
e = 1;
}
else {
e = 0;
}
r = regexec(®ex,source,0,NULL,0); // source email
if(!r) {
e = 0;
}
else
if(r == 1) {
sprintf(emessage,"REGEX MATCH:Fail:%s",proc);
log_proc(ebs->r,emessage,TXLOG);
e = 1;
}
else {
regerror(r,®ex,buf,100);
sprintf(emessage,"REGEX MATCH:Fail:%s:%s",proc,buf);
log_proc(ebs->r,emessage,TXLOG);
e = 1;
}
regfree(®ex);
// Now evaluate e to determine success
if (!e) { ... }