如何在boost :: u32regex&中打印价值REG

时间:2013-07-31 09:59:04

标签: c++ boost stl boost-regex

我想使用boost::u32regex & regstd::cout打印一个值。

对于boost::regex & reg,我可以打印reg.str()但无法将str()用于boost::u32regex

有人可以告诉我吗?

1 个答案:

答案 0 :(得分:2)

似乎boost::u32regex后面使用的类型与cout不兼容。他们似乎正在使用Uchar32库中的ICU

您可以使用迭代器打印正则表达式值:

#include <boost/regex.hpp>
#include <boost/regex/icu.hpp>
#include <unicode/ustream.h>

void PrintRegex32( const boost::u32regex& r )
{
    boost::u32regex::iterator it  = r.begin();
    boost::u32regex::iterator ite = r.end();

    for ( ; it != ite; ++it )
    {
        std::cout << UnicodeString(*it) << std::endl;
    }
}

这对我有用。它不像打印boost::regex值那么容易,但它有效。我建议你创建一个这样做的函数,就像在例子中一样。

编辑:

您可以尝试代码:

boost::u32regex r = boost::make_u32regex("(?:\\A|.*\\\)([^\\\]+)");
PrintRegex32( r );

  

我可以打印reg.str()

仅供参考,boost::basic_regex有一个operator<<重载,他们正在做同样的事情:

// reg is a boost::regex
std::cout << reg.str() << std::endl;

相同
// reg is a boost::regex
std::cout << reg << std::endl;