我需要匹配任何单词,包括法语单词(如é,è,ê等口音)。 我已将我的语言环境设置为 French_France.1252 并使用了标志 std :: regex_constants :: collate 但重音字母仍然没有匹配:
#include <iostream>
#include <string>
#include <regex>
#include <locale>
void display_result(const std::string & _str, const std::regex & _rgx)
{
if (std::regex_match(_str, _rgx))
std::cout << "Positive match found in \"" << _str << "\".\n";
else
std::cout << "NO match found in \"" << _str << "\".\n";
}
int main(int argc, char *argv[])
{
setlocale(LC_ALL, "");
std::locale::global(std::locale(""));
std::regex rgx("[[:alpha:]]+", std::regex_constants::icase | std::regex_constants::extended | std::regex_constants::collate);
std::cout << "regex use " << rgx.getloc().name() << " locale.\n";
std::string str{ "Student" };
display_result(str, rgx);
str = "Élève";
display_result(str, rgx);
rgx.assign("[[=e=]]", std::regex_constants::icase | std::regex_constants::extended | std::regex_constants::collate);
str = "E";
display_result(str, rgx);
str = "É";
display_result(str, rgx);
std::cin.get();
}
输出
regex use French_France.1252 locale.
Positive match found in "Student".
NO match found in "Élève".
Positive match found in "E".
NO match found in "É".
我不能使用宽字符(程序必须解析的字符串来自char * argv[]
),也不能使用boost。
什么出错了?
我使用Microsoft Visual Studio 2013。