微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

std::regex_search 反向搜索

如何解决std::regex_search 反向搜索

https://stackoverflow.com/a/33307828/9250490 您可以通过 12345

找到第一个 5-sequential-number regex_search(s.cbegin(),s.cend()...
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(),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::string::const_reverse_iterator 调用中传递 std::regex_search

直接使用 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;

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。