如何从字符串变量构建正则表达式,并将其解释为原始格式。
std::regex re{R"pattern"};
对于上面的代码,有没有办法用编译时构建的std::string pattern;
变量替换固定字符串"pattern"
或运行时。
我试过了但是没用:
std::string pattern = "key";
std::string pattern = std::string("R(\"") + pattern + ")\"";
std::regex re(pattern); // does not work as if it should when write re(R"key")
具体来说,如果使用 re(R("key")
会按预期找到结果。但是使用带有模式的 re(pattern)
进行构建是完全相同的value ("key")
,没有找到结果。
这可能是我需要的,但它是针对 Java 的,不确定 C++ 中是否有类似的东西:
最佳答案
std::string pattern = std::string("R(\"") + pattern + ")\"";
应按如下方式从原始字符串文字构建
pattern = std::string(R"(\")") + pattern + std::string(R"(\")");
这会产生类似
的字符串值\"key\"
查看工作 live example ;
如果你想转义括号,你可以这样写
pattern = std::string(R"(\(")") + pattern + std::string(R"("\))");
这会产生类似
的字符串值\("key"\)
旁注:您不能将 pattern
变量定义两次。在后续使用中省略 std::string
类型。
关于c++ - 如何从字符串变量为正则表达式构建原始字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57439941/