在RegEx中逐字逐字

时间:2016-01-04 16:50:23

标签: c++ regex

使用std::regex我想创建一个带有例如字符串的函数 并使用该字符串创建一个RegEx,但字符串中的每个字符串都按字面匹配。

例如,让我们说s("[ds-aa]");我想使用该字符串创建一个RegEx,但字面意思是RegEx将匹配"\[ds\-aa\]"

1 个答案:

答案 0 :(得分:0)

假设您正在使用std::regex和默认的ECMA正则表达式,您只需要转义

. * + ? ^ $ { } ( ) | [ ] \

所以,你可以使用

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

std::string regexEscape(std::string str) {
    return std::regex_replace(str, std::regex(R"([.^$|()[\]{}*+?\\])"), R"(\$&)");
}
int main()
{
    std::cout << "Test escaped pattern: " << regexEscape("[da-d$\\]")  << std::endl; // = > \[da-d\$\\\]
    std::string key = "\\56";
    string input = "John\\56 Fred\\12";
    std::regex rx(R"((\w+))" + regexEscape(key));
    smatch m;
    if (std::regex_search(input, m, rx)) {
        std::cout << "Who has \\56? - " << m[1].str() << std::endl;
    }
}

请参阅IDEONE demo

结果:

Test escaped pattern: \[da-d\$\\\]
Who has \56? - John