次の API regex_match を例に取ります。regex_match(any_string_here,"") で呼び出すと、ここで空の正規表現を渡したことがわかります。その後、常に 0 が返されます。これは、一致が成功したことを意味します。では、空の正規表現は POSIX BRE/ERE で何を意味するのでしょうか?
空の正規表現は、"" を glibc regcomp 関数に渡すことを意味します。次の例を参照してください。
int regex_match( const char* haystack, const char* needle )
{
regex_t needle_pattern;
int regex_flag = REG_NOSUB | REG_EXTENDED;
int rc = regcomp(&needle_pattern,needle, regex_flag);
if (rc != 0){
char error_msg[256];
size_t error_len = 0;
error_len = regerror(rc,&needle_pattern,error_msg,sizeof(error_msg));
error_len = error_len < sizeof(error_msg) ? error_len : sizeof(error_msg) - 1;
error_msg[error_len] = '\0';
cout<<"compile error: "<<error_msg<<endl;
regfree(&needle_pattern);
return regcomp_error_base + rc;
}
rc = regexec(&needle_pattern, haystack, 0, NULL, 0);
if ( (rc != 0) && (rc != REG_NOMATCH)){
char error_msg[256];
size_t error_len = 0;
error_len = regerror(rc,&needle_pattern,error_msg,sizeof(error_msg));
error_len = error_len < sizeof(error_msg) ? error_len : sizeof(error_msg) - 1;
error_msg[error_len] = '\0';
cout<<"exec error: "<<error_msg<<endl;
}
regfree(&needle_pattern);
//regexec returns 0 if the regular expression matches
return rc;
}