我查看了 C++11 的新 regex 库的许多来源,但其中大多数更关注语法,或者更基本的使用,如 regex_match 或 regex_search。虽然这些文章帮助我开始使用正则表达式库,但我很难找到有关捕获组的更多详细信息。
我想要完成的是找出匹配属于哪个捕获组。到目前为止,我只找到了一种方法来做到这一点。
#include <iostream>
#include <string>
#include <regex>
int main(int argc, char** argv)
{
std::string input = "+12 -12 -13 90 qwerty";
std::regex pattern("([+-]?[[:digit:]]+)|([[:alpha:]]+)");
auto iter_begin = std::sregex_token_iterator(input.begin(), input.end(), pattern, 1);
auto iter_end = std::sregex_token_iterator();
for (auto it = iter_begin; it != iter_end; ++it)
{
std::ssub_match match = *it;
std::cout << "Match: " << match.str() << " [" << match.length() << "]" << std::endl;
}
std::cout << std::endl << "Done matching..." << std::endl;
std::string temp;
std::getline(std::cin, temp);
return 0;
}
在更改 的第四个参数的值时std::sregex_token_iterator
,我可以控制它将保留哪个子匹配,并告诉它丢弃其余的子匹配。因此,要找出匹配属于哪个捕获组,我可以简单地遍历捕获组以找出特定组没有丢弃哪些匹配。
但是,这对我来说是不可取的,因为除非在后台进行一些缓存,否则我希望每个构造都std::sregex_token_iterator
传递输入并再次找到匹配项(如果这是错误的,请有人纠正我,但这是最好的我可以得出的结论)。
有没有更好的方法来找到匹配所属的捕获组?还是迭代子匹配是最好的做法?