c++ 11 regex_replace奇怪的行为

C++11 regex_replace weird behaviour

本文关键字:replace regex c++      更新时间:2023-10-16

谁能给我解释一下为什么这段代码会导致下面的输出:

#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

在我看来,运行时间被打破了。在下面的页面上搜索regex,没有实现。

https://gcc.gnu.org/onlinedocs/libstdc + +/手册/status.html # status.iso.2011

regex_replace不修改它的参数,它返回一个新的字符串。试试这个:

test_string = std::regex_replace(test_string, std::regex(".*(<name>).*"), "master");