我已經查看了C++ 11新的正則表達式庫的一些源代碼,但其中大多數更注重語法,或者像regex_match這樣的更基本的用法,或regex_search。雖然這些文章幫助我開始使用正則表達式庫,但我很難在捕獲組中找到更多詳細信息。C++ 11正則表達式查找捕獲組標識符
我想要完成的是找出匹配屬於哪個捕獲組。到目前爲止,我只找到一種方法來做到這一點。
#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
每個施工再次越過輸入,並找到匹配(有人請糾正我,如果這是錯了,但這是我可以得出的最好結論)。
有沒有更好的方法找到匹配所屬的捕獲組?或者正在迭代子匹配的最佳行動方案?
非常感謝,這正是我希望的。 – TheCodeBroski