我正在尝试创建一个正则表达式,它匹配推到字符串向量上的字符串。是否可以创建单个正则表达式来匹配并提取所有“数字”值?
std::vector<std::string> strings;
strings.push_back("100/2");
strings.push_back("2");
strings.push_back("200/99");
strings.push_back("150/9*0");
std::regex rex1("(\\d{1,3})(\\/(\\d{1,2})(\\*(\\d+)))"); // matches 150/9*0
std::regex rex2("(\\d{1,3})(\\/(\\d{1,2}))"); // matches 200/99
for (size_t k = 0; k < strings.size(); k++)
{
std::smatch m;
std::regex_match(strings[k], m, rex1);
for (size_t i = 0; i < m.size(); i++)
std::cout << "match " << i << ": " << m[i] << std::endl;
}
答案 0 :(得分:0)
^(\\d{1,3})(\\/(\\d{1,2})(\\*(\\d+))?)?$
这使得后半部分可选(以便“2”仍然匹配)并使* 0位在后半部分可选。
最后$
是必要的,这样如果字符串确实包含可选部分,那么它们肯定仍然匹配&amp;捕获。