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

How to find out if an optional part of a regular expression is captured or not?

本文关键字:选部 正则表达式 何确定 是否      更新时间:2023-10-16

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

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

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

组有一个可以检查的布尔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。