読者です 読者をやめる 読者になる 読者になる

Boost使って正規表現で名前付きキャプチャしようとした話

もともとPython

#coding:utf-8
from __future__ import print_function 
import re
s = "123hello"
# named capture 
m = re.match(r"(?P<num>\d*)(?P<str>.*)", s)
print("num is", m.group("num"))
print("str is", m.group("str"))

というように、正規表現を使って中の文字列に対して名前付きキャプチャしようとしただけなんですが、、、

以下C++で上のやつをやった結果です。

#include <iostream>
#include <boost/xpressive/xpressive.hpp>
#include <boost/xpressive/regex_algorithms.hpp>

using namespace boost::xpressive;
int main(void)
{
    std::string str("123hello");
    sregex rx = sregex::compile("(?P<num>\\d*)(?P<str>.*)");
    smatch m;

    if (regex_match(str.begin(), str.end(), m, rx)){
        std::cout << "num is " << m["num"] << std::endl;
        std::cout << "str is " << m["str"] << std::endl;
    }
}

User's Guide - 1.44.0
これ見れば一発かもしれませんが...