在Xcode中使用POSIX RegEx的结果很奇怪

时间:2012-11-13 01:49:49

标签: c++ regex xcode posix

我刚刚使用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。

1 个答案:

答案 0 :(得分:0)

事实证明POSIX Extended不支持转义空格字符,但是对于文字空格来说很好,所以我替换了所有的" \ s"用" "然后就开了。

有关详细信息,请参阅https://stackoverflow.com/a/400316/497357