关于c++ 正则表达式regex的一些问题
std::vector<std::string> split(const std::string& str, const std::string& regex_str)
{
std::regex re(regex_str);
return { std::sregex_token_iterator(str.begin(), str.end(), re, -1), std::sregex_token_iterator() };
}
int main() {
std::string a = "hello world c++ shen jie";
std::string re = " ";
auto b = split(a, re);
for (auto& i : b) {
std::cout << i << std::endl;
}
return 0;
}
/*
//答案
hello
world
c++
shen
jie
*/
以上代码可以正常运行,但是我想要一种更加简化且美观的写法,比如:
把开始的 std::regex re(regex_str);
加到return 那一行中
比如:
std::vector<std::string> split(const std::string& str, const std::string& regex_str)
{ // a yet more concise form!
return { std::sregex_token_iterator(str.begin(), str.end(), std::regex(regex_str), -1), std::sregex_token_iterator() };
}
但是会报错
或者使用lambda表达式
std::vector<std::string> split(const std::string& str, const std::string& regex_str)
{
return { std::sregex_token_iterator(str.begin(), str.end(), [regex_str]()->std::regex{
std::regex re(regex_str);
return re;},
-1),
std::sregex_token_iterator()};
}
但是也是会报错,我该怎么写呢