1
我只是切換到使用內置的正則表達式的功能regex.h(是跨平臺)。並用以下簡單的regex,許多有效的投入,如[email protected]現在失敗(其中[email protected]仍然正常工作):與POSIX正則表達式奇怪的結果在Xcode
^[^@\s][email protected][^@\s]+\.[^\s\[email protected]]+$
調用代碼:
return Common::regexMatch("^[^@\\s][email protected][^@\\s]+\\.[^\\s\\[email protected]]+$", 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;
}
這是令人費解的是它基於不同的萊特在辨別r,當正則表達式模式根本沒有字母規範。而且它不一樣的投入是非常一致的。 TIA。
既然是'是失敗了,您s',我想這與逃逸問題。嘗試用單個替換雙反斜槓。另外,沒有必要在字符類中跳過這段時間。永遠。 –
嘿感謝快速回復,這是超級有幫助的。原來POSIX擴展不支持轉義空格字符,但只是字面上的空間很好,所以我更換了所有的「\\的」有「」,它發射的權利了! – leontx
注意,'\ s'具有比單一的空間不同的含義。 '\ s'等價於'[\ t \ n \ r]'。所以它匹配任何類型的空白。同樣,隨時將解決方案發布到您的問題上作爲答案並接受它。如果你自己發現了這個問題,那是非常有效的。 –