C ++正则表达式库的新手。
我们正在尝试解析一行
*10 abc
我们想将此行解析/拆分为仅两个标记:
10
abc
我尝试了多种操作,例如regex_search,但我确实获得了3个匹配项。第一个匹配是整体匹配,第二个是子序列匹配。我的问题是
我们怎么只能从上面的字符串中得到两个匹配(10&abc)。我尝试过的快照:
#include <regex>
#include <iostream>
int main() {
const std::string t = "*10 abc";
std::regex rgxx("\\*(\\d+)\\s+(.+)");
std::smatch match;
bool matched1 = std::regex_search(t.begin(), t.end(), match, rgxx);
std::cout << "Matched size " << match.size() << std::endl;
for(int i = 0 ; i < match.size(); ++i) {
std::cout << i << " match " << match[i] << std::endl;
}
}
输出:
Matched size 3
0 match *10 abc
1 match 10
2 match abc
0比赛是我不想要的比赛。
我也开放使用Boost库/正则表达式。谢谢。
答案 0 :(得分:2)
您的代码本身并没有什么错。零匹配只是整个字符串,与正则表达式模式匹配。如果只需要两个捕获的术语,则只需打印第一个和第二个捕获组:
const std::string t = "*10 abc";
std::regex rgxx("(\\d+)\\s+(.+)");
std::smatch match;
bool matched1 = std::regex_search(t.begin(), t.end(), match, rgxx);
std::cout << "Matched size " << match.size() << std::endl;
for (int i=1; i < match.size(); ++i) {
std::cout << i << " match " << match[i] << std::endl;
}
Matched size 3
1 match 10
2 match abc
因此,这里的教训是匹配数组中的第一个条目(索引为零)将始终是整个字符串。