Boost regex token迭代器:在括号之间获取输入
Boost regex token iterator: getting input between parentheses
我使用Boost::tr1::sregex_token_iterator
使用以下函数int regexMultiple(std::string **s, std::string r)
{
std::tr1::regex term=(std::tr1::regex)r;
const std::tr1::sregex_token_iterator end;
int nCountOcurrences;
std::string sTemp=**s;
for (std::tr1::sregex_token_iterator i(sTemp.begin(),sTemp.end(), term); i != end; ++i)
{
(*s)[nCountOcurrences]=*i;
nCountOcurrences++;
}
return nCountOcurrences;
}
可以想见,**s
是一个指向字符串的指针,r是正在讨论的正则表达式。这个函数可以工作(事实上,这个一个可能不起作用,因为我修改了它,只是为了使它更简单,考虑到其余部分与问题无关)。
我想知道的是,例如,给定这样的正则表达式:"Email: (.*?) Phone:..."
,是否有任何方法可以从中检索(.*?)部分,或者我应该在给定的结果上应用子字符串来实现这一点?
否则,它会抛出:Email: myemail@domain.com Phone: ..
谢谢。
应该像Kerrek SB
那样使用regex_search: http://www.boost.org/doc/libs/1_39_0/libs/regex/doc/html/boost_regex/ref/regex_search.html
int regexMultiple(std::string **s, std::string r)
{
std::tr1::regex term=(std::tr1::regex)r;
std::string::const_iterator start, end;
boost::match_results<std::string::const_iterator> what;
int nCountOcurrences=0;
std::string sTemp=**s;
start=sTemp.begin();
end=sTemp.end();
boost::match_flag_type flags = boost::match_default;
while (regex_search(start,end, what, term, flags))
{
(*s)[nCountOcurrences]=what[1];
nCountOcurrences++;
start = what[0].second;
flags |= boost::match_prev_avail;
flags |= boost::match_not_bob;
}
return nCountOcurrences;
}
相关文章:
- 如何以毫秒为单位获取开始时间和 now() 之间的毫秒差异(以 C++为单位?
- 获取 2 个数字之间的差异百分比
- 比较它们之间的元素并获取公共值的键
- 如何获取两个时间点之间的时间
- 如何仅在 2 个节点之间获取最短路径,给定邻接列表有向图?
- C++获取两个分隔符之间的字符串并替换它
- 高CPU使用率,在API桌面复制中获取帧之间具有不同的超时间隔
- 正则表达式 获取两个换行符之间的文本
- 获取两个数组之间的差异
- 多个线程之间的获取-释放内存顺序
- 在文本中的两个非唯一字符串之间获取子弦
- 如何在多个不同字符之间获取多个字符串
- 在两天之间获取交易天数
- 从两个单词之间获取字符串
- C++如何在两个单词之间获取字符串/字符
- 在分隔符之间获取字符串
- 在两个迭代器之间获取“std::string”的子字符串
- Boost regex token迭代器:在括号之间获取输入
- 在使用相同C++代码的跨平台窗体之间获取运行时错误
- 如何在两个提升时间之间获取每个单独的日期