有人可以向我解释为什么这段代码会产生以下输出:
#include <iostream>
#include <regex>
#include <string>
using namespace std;
int main(void) {
std::string test_string("foo.bar.baz.<name>:<value>|@<rate>|#tag:<tag>");
if (std::regex_match(test_string, std::regex(".*(<name>).*"))) {
std::cout << "MATCH!" << std::endl;
} else {
std::cout << "NO MATCH!" << std::endl;
}
test_string = std::regex_replace(test_string, std::regex(".*(<name>).*"), "master");
std::cout << test_string << std::endl;
return 0;
}
输出:
[root@88c9be66f008 tmp]# ./test
MATCH!
master
在我看来,运行时间已经破裂。在下面的页面上搜索正则表达式,没有任何实现。
https://gcc.gnu.org/onlinedocs/libstdc++/manual/status.html#status.iso.2011
答案 0 :(得分:0)
regex_replace
不修改其参数,它返回一个新字符串。试试这个:
test_string = std::regex_replace(test_string, std::regex(".*(<name>).*"), "master");