我的应用具有用户定义的正则表达式模式,最多可包含3个捕获组。有没有更好的方法来实现以下代码?
std::string glyph1, glyph2, glyph3;
switch (regex.NumberOfCapturingGroups())
{
case 0:
default:
found = regex.PartialMatch(word);
break;
case 1:
found = regex.PartialMatch(word, &glyph1);
break;
case 2:
found = regex.PartialMatch(word, &glyph1, &glyph2);
break;
case 3:
found = regex.PartialMatch(word, &glyph1, &glyph2, &glyph3);
break;
}
if (found) {
// ...
}
不幸的是,如果正则表达式匹配但返回的值为false,那么请求的捕获组就会减少。
答案 0 :(得分:0)
您可以使用列表或向量来解决此问题。而不是重载函数,而是为vector<std::string> glyph
创建一个参数int n
和regex.NumberOfCapturingGroups()
。
vector<std::string> glyph;
regex.PartialMatch(word, glyph, regex.NumberOfCapturingGroups());
if (found) {
// ...
}
然后只需使用glyph[i]
来访问元素。