如何确定是否捕获了正则表达式的可选部分?

时间:2015-12-09 10:58:37

标签: c++ boost boost-regex

假设我有这个简单的正则表达式搜索代码:

boost::regex re("(\\d+)(/(\\d))?");
boost::smatch matches;
boost::regex_search(input_str, matches, re);

它会在字符串中搜索123/2123之类的内容。第二个数字和/是可选的 我想知道如果/2存在与否,如果存在,则在变量之后设置第二个数字,否则将变量设置为-1。 我尝试使用matches.size(),但无论第二部分是否存在,它总是相同的值。

1 个答案:

答案 0 :(得分:1)

这些组有一个布尔matched成员,您可以查看。

请参阅http://www.boost.org/doc/libs/1_59_0/libs/regex/doc/html/boost_regex/ref/regex_match.html

  

m[b].matched - 对于所有整数n< m.size(),如果子表达式n参与匹配,则为true,否则为false。