C++ Xcode中POSIX正则表达式的奇怪结果
我刚刚使用regex.h(跨平台)切换到内置的regex功能。对于以下简单的正则表达式,许多有效的输入,例如as@abc.com现在失败(其中ab@abc.com仍然可以正常工作): 呼叫代码为:C++ Xcode中POSIX正则表达式的奇怪结果,c++,regex,xcode,posix,C++,Regex,Xcode,Posix,我刚刚使用regex.h(跨平台)切换到内置的regex功能。对于以下简单的正则表达式,许多有效的输入,例如as@abc.com现在失败(其中ab@abc.com仍然可以正常工作): 呼叫代码为: return Common::regexMatch("^[^@\\s]+@[^@\\s]+\\.[^\\s\\.@]+$", userInput); 下面是实施: #import "regex.h" bool Common::regexMatch(const string& regex,
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;
}
令人困惑的是,当regex模式中根本没有字母规范时,它是基于不同的字母进行区分的。它对不喜欢的输入非常一致。TIA.事实证明POSIX Extended不支持转义空格字符,但可以使用文字空格,因此我将所有“\s”替换为“”,它立即启动
有关更多信息,请参见,因为您失败的是
s
,我想这是转义的问题。尝试将双反斜杠替换为单反斜杠。此外,不需要在字符类中转义句点。永远。嘿,谢谢你的快速回复,这非常有帮助。原来POSIX Extended不支持转义空格字符,但对文字空格也可以,所以我用“”替换了所有的“\\s”,它立即启动了!请注意,\s
与单个空格的含义不同\s
相当于[\t\n\r]
。所以它匹配任何类型的空白。此外,请随意将问题的解决方案作为答案发布并接受。如果你自己发现了问题的话,这是完全正确的。我刚刚发现了这篇很棒的文章,它使用POSIX扩展语法,你不能在字符类中转义任何字符。
#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;
}