在C ++ 11中替换正则表达式

时间:2016-04-20 13:39:17

标签: regex c++11

我需要用字符串T1.9替换unit19类型的字符串。数字位数可能会有所不同,例如T34.999应该变为unit34999。这是我的进步:

std::regex e ("^(T\d+\.\d+)$");
std::string result (std::regex_replace(version, e, "") );

我应该为格式写什么?或者是在一次,两次迭代中替换字符串的方法,错误吗?

1 个答案:

答案 0 :(得分:2)

您需要调整模式中的捕获组,并在替换模式中使用反向引用:

^T([0-9]+)[.]([0-9]+)$

并替换为unit$1$2

请参阅regex demo

A test at IDEONE

#include <iostream>
#include <regex>
using namespace std;

int main() {
    std::vector<std::string> strings;
    strings.push_back("T34.999");
    strings.push_back("T1.9");
    std::regex reg("^T([0-9]+)[.]([0-9]+)$");
    for (size_t k = 0; k < strings.size(); k++)
    {
        std::cout << std::regex_replace(strings[k], reg, "unit$1$2") << std::endl;
    }
    return 0;
}