无法匹配区域设置相关的字符

时间:2015-05-30 18:47:16

标签: c++ regex locale non-ascii-characters

我需要匹配任何单词,包括法语单词(如é,è,ê等口音)。 我已将我的语言环境设置为 French_France.1252 并使用了标志 std :: regex_constants :: collat​​e 但重音字母仍然没有匹配:

#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。

0 个答案:

没有答案