gpt4 book ai didi

c++ - Boost 正则表达式 token 迭代器 : getting input between parentheses

转载 作者:行者123 更新时间:2023-11-28 03:48:16 24 4
gpt4 key购买 nike

我在 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;
}

关于c++ - Boost 正则表达式 token 迭代器 : getting input between parentheses,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6684832/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com