使用std::regex
我想创建一个带有例如字符串的函数
并使用该字符串创建一个RegEx,但字符串中的每个字符串都按字面匹配。
例如,让我们说s("[ds-aa]")
;我想使用该字符串创建一个RegEx,但字面意思是RegEx将匹配"\[ds\-aa\]"
。
答案 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