我的代码是:
#include <boost/regex.hpp>
boost::cmatch matches;
boost::regex_match("alpha beta", matches, boost::regex("([a-z])+"));
cout << "found: " << matches.size() << endl;
它显示found: 2
表示只发现一次出现...如何指示它找到三次出现?谢谢!
答案 0 :(得分:2)
这是我到目前为止所发现的:
text = "alpha beta";
string::const_iterator begin = text.begin();
string::const_iterator end = text.end();
boost::match_results<string::const_iterator> what;
while (regex_search(begin, end, what, boost::regex("([a-z]+)"))) {
cout << string(what[1].first, what[2].second-1);
begin = what[0].second;
}
它按预期工作。也许有人知道更好的解决方案?
答案 1 :(得分:2)
在验证某些内容是否匹配之前,您不应该调用matches.size(),即您的代码看起来应该是这样的:
#include <boost/regex.hpp>
boost::cmatch matches;
if (boost::regex_match("alpha beta", matches, boost::regex("([a-z])+")))
cout << "found: " << matches.size() << endl;
else
cout << "nothing found" << endl;
输出将“无法找到”,因为regex_match尝试匹配整个字符串。你想要的可能是正在寻找子串的regex_search。下面的代码对您来说可能更好一点:
#include <boost/regex.hpp>
boost::cmatch matches;
if (boost::regex_search("alpha beta", matches, boost::regex("([a-z])+")))
cout << "found: " << matches.size() << endl;
else
cout << "nothing found" << endl;
但是只会输出“2”,即匹配[0]和“alpha”并将[1]与“a”匹配(alpha的最后一个字母 - 最后一组匹配)
要获得组中的整个单词,您必须将模式更改为([a-z] +)并重复调用regex_search,就像在自己的答案中一样。
很抱歉迟到2年回复,但如果有人像我一样在谷歌搜索,那么也许对他来说仍然有用......
答案 2 :(得分:0)
这对我有用,也许有人会发现它很有用..
std::string arg = "alpha beta";
boost::sregex_iterator it{arg.begin(), arg.end(), boost::regex("([a-z])+")};
boost::sregex_iterator end;
for (; it != end; ++it) {
std::cout << *it << std::endl;
}
打印:
alpha
beta