unicode正则表达式c ++

时间:2014-05-29 12:08:04

标签: c++ regex boost unicode boost-regex

我希望使用正则表达式匹配“février”或任何其他月份。

正则表达式:

  

^(维耶| FEVRIER | MARS | AVRIL | MAI |朱安| JUILLET | AOUT | SEPTEMBRE | OCTOBRE | NOVEMBRE | DECEMBRE |一月|二月|三月|四月|五月|六月| JUN |七月|八月|九月|十月| 11月| 12月| [JJ] anvier | [FF]évrier| [mm]的ARS | [AA] vril | [mm]的AI | [JJ] UIN | [JJ] uillet | [AA] O [欧盟] T | AOUT | [SS] eptembre | [OO] ctobre | [NN] ovembre | [日] [EE] CEMBRE)$


问题

问题是我无法匹配包含unicode字母的字词:à,é,è等。 我在以下网站上发现:Unicode é的unicode值为\u00E9。我可以在正则表达式中集成此值吗?以及如何在正则表达式中使用unicode值。


void returnValue(string pattern)
{
    bool x = false;
    const boost::regex e("février");
    x = boost::regex_search(pattern.c_str(),e);
    if(x){ cout <<"found"<<endl; }
}

1 个答案:

答案 0 :(得分:3)

您可以使用boost :: regex匹配unicode。有两种方法可以做到这一点。

  1. 如果您的平台的wchar_t可以包含Unicode字符并且您平台的C / C ++运行时正确处理宽字符常量,则依赖于wchar_t。 (这有很少的陷阱,没有建议,请在我提供的链接中阅读)

  2. 使用Unicode感知正则表达式类型(boost :: u32regex)。必须将Boost配置为通过Building With Unicode and ICU Support

  3. 启用此功能

    http://www.boost.org/doc/libs/1_42_0/libs/regex/doc/html/boost_regex/unicode.html