regex:在ascii和unicode之间切换

boost.regex:switching between ascii and unicode

本文关键字:之间 unicode ascii regex      更新时间:2023-10-16

在boost.regex中有一种在ascii和utf之间切换的方便方法吗?

例如,我现在看到的唯一方法是在boost::u32regexboost::regex之间切换。

这是在unicode和ascii之间切换的唯一方法吗?
我希望能够将一个参数传递给boost,指定我的字符编码,这样就不必重复很多代码。

这是在unicode和ascii之间切换的唯一方法吗?

差不多。你认为boost::regex实际上是一个类型别名:

namespace boost{
    template <class charT, class traits = regex_traits<charT>  >
    class basic_regex;
    typedef basic_regex<char>      regex;
    typedef basic_regex<wchar_t>   wregex;
}

请注意,字符类型是一个模板参数,而不是运行时参数。由于boost::regex是在char上构建的,因此无法支持unicode。

boost::u32regex是相同的方式:

typedef basic_regex<UChar32,icu_regex_traits> u32regex;

为了在它们之间进行真正的概括,您还必须将所有内容都写为模板。你不是服用boost::regex,而是服用boost::basic_regex<charT, traits>。这是模板的缺点之一——它们有点渗透到所有东西中。