Boost.Xpressive で () の中身を取り出す

mark_tag を使用して、マッチした位置の文字列を取得することが出来ます。

[ソース]

#define _SCL_SECURE_NO_WARNINGS
#include <iostream>
#include <boost/xpressive/xpressive.hpp>


int
main(){
    namespace x = boost::xpressive;
    x::mark_tag name(1);
    x::sregex regex = "(" >> (name = -*x::_) >> ")";

    std::string source = "(homu)";
    x::smatch what;
    if( x::regex_search(source, what, regex) ){
        std::cout << what.str() << std::endl;
        std::cout << what[name].str() << std::endl;
    }
    
    return 0;
}

[出力]

(homu)
homu

Boost.Spirit.Qi とはまた違って面白いですね。

[boost]

  • ver 1.49.0