C ++ 11 regex_replace奇怪的行为

时间:2016-09-20 13:49:14

标签: c++ regex c++11

有人可以向我解释为什么这段代码会产生以下输出:

#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

1 个答案:

答案 0 :(得分:0)

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

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