繁体   English   中英

std::regex_search 反向搜索

[英]std::regex_search reverse search

https://stackoverflow.com/a/33307828/9250490您可以通过regex_search(s.cbegin(), s.cend()...找到第一个 5-sequential-number 12345 ...

string s = "abcde, eee12345 11111ddd 55555 hello";
std::smatch m;
bool b = std::regex_search(s.cbegin(), s.cend(), m, std::regex("[0-9]{5}"));
cout << m[0] << endl;

但是如果我想找到最后一个55555 ,我试过了,

std::regex_search(s.crbegin(), s.crend(), m, std::regex("[0-9]{5}"));

但它不会编译错误,

Error C2672 'std::regex_search': no matching overloaded function found ForTest

在具有 C++17 标准的 Visual Studion 2019 上。 为什么?

这是因为迭代器类型不匹配,如果您在 Visual Studio 中查看std::smatch的源代码,您会发现这一点。

using smatch  = match_results<string::const_iterator>;

你试图在你的std::regex_search调用中传递std::string::const_reverse_iterator

直接使用std::match_results<std::string::const_reverse_iterator>代替。

const std::string s = "abcde, eee12345 11111ddd 55555 hello";
std::match_results<std::string::const_reverse_iterator> m;
bool b = std::regex_search(s.crbegin(), s.crend(), m, std::regex("[0-9]{5}"));
std::cout << m[0] << std::endl;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM