我刚刚使用 regex.h(跨平台)切换到内置的正则表达式功能。并且使用以下简单的正则表达式,许多有效的输入,例如as@abc.com现在会失败(ab@abc.com仍然可以正常工作):
^[^@\s]+@[^@\s]+\.[^\s\.@]+$
调用代码是:
return Common::regexMatch("^[^@\\s]+@[^@\\s]+\\.[^\\s\\.@]+$", userInput);
这是实现:
#import "regex.h"
bool Common::regexMatch(const string& regex, const string& text) {
//return [[NSString stringWithCString:text.c_str() encoding:NSUTF8StringEncoding] isMatchedByRegex:[NSString stringWithCString:regex.c_str() encoding:NSUTF8StringEncoding]];
regex_t re = {0};
if (regcomp(&re, regex.c_str(), REG_NOSUB | REG_EXTENDED | REG_ICASE) != 0)
return false;
int status = regexec(&re, text.c_str(), (size_t)0, NULL, 0);
regfree(&re);
if (status != 0)
return false;
return true;
}
令人费解的是,当正则表达式模式中根本没有字母规范时,它会根据不同的字母进行区分。它不喜欢哪些输入非常一致。TIA。