0

我想在boost::u32regex & regusing中打印一个值std::cout

因为boost::regex & reg,我可以打印reg.str()但不能使用str()to boost::u32regex

谁能告诉我?

4

1 回答 1

2

好像后面使用的类型boost::u32regex不兼容cout。看来他们是Uchar32ICU图书馆使用的。

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

#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;
于 2013-07-31T13:33:59.113 回答