std::regex_search反向搜索
std::regex_search reverse search
您可以通过 regex_search(s.cbegin(), s.cend()...
找到第一个 5 序号 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;
您可以通过 regex_search(s.cbegin(), s.cend()...
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;