2

我正在尝试在此处的 boost::regex_serach 示例中执行类似操作。

我的代码示例是:

boost::regex expression("<name=\"[a-zA-z0-9]+\" "
                 "init=\"[0-9]+\"/>");
std::string::const_iterator start, end;
start = Field.begin();
end = Field.end();
boost::smatch what;
boost::match_flag_type flags = boost::match_default;
while(regex_search(start, end, what, expression,flags)){
    std::cout<<"@@@" << std::string(what[0].first,what[0].second);
    start = what[0].second;
    // update flags:
    flags |= boost::match_prev_avail;
    flags |= boost::match_not_bob;
}

我有一些 xml 文件..... name="SamleName" init="6"/...并希望在其中包含 SamlpeNamewhat[1]和 init 值what[2],但此处列出的代码仅将此字段" name="SamleName" init="6"/"写入what[0].

如何在 regex_search 示例中拆分它?

4

2 回答 2

2

从纯粹的正则表达式的角度来看(我没有使用 boost 正则表达式库),您需要使用圆括号对所需的匹配项进行分组()。有关详细信息,请参阅http://www.regular-expressions.info/brackets.html

所以你的正则表达式应该是这样的

boost::regex expression("<name=(\"[a-zA-z0-9]+\") init=(\"[0-9]+\")/>");

您可以像这样可视化匹配

<name=(\"[a-zA-z0-9]+\") init=(\"[0-9]+\")/>

正则表达式可视化

在 Debuggex 上实时编辑

于 2013-08-02T07:37:53.283 回答
0

使用boost::sregex_iterator怎么样?

于 2013-08-02T13:23:52.763 回答