OK ...この正規表現で動作するようになりました:
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) { ... }