gpt4 book ai didi

c++ - 将字符串作为正则表达式模式输入传递。 (非标量误差)

转载 作者:行者123 更新时间:2023-11-28 05:51:44 25 4
gpt4 key购买 nike

我正在尝试执行正则表达式搜索,但我不想键入模式(例如 std::regex reg = "\."),而是想为正则表达式提供字符串输入。这是我将字符串转换为 const char* 并将其传递给 regex_search 的代码:

void trigger_regex(string name, string body)
{

map<string,string>::iterator it;
it=test.mydata.find(name);
if( it == test.mydata.end())
{
std::cout<<"REGEX not found"<<endl;
}
else
cout << "Found REGEX with name: " << it->first << " and rule: " << it->second << endl ;

string subject = body;
string rule = it -> second;
const char * pattern = rule.c_str();
regex reg = (pattern);
smatch match;

while (regex_search (subject,match,reg)) {
for (auto x:match) std::cout << x << " ";
std::cout << std::endl;
body = match.suffix().str();
}
}

我得到错误:

conversion from 'const char*' to non-scalar type 'std::regex {aka std::basic_regex}' requested regex reg1 = (rule1);

有什么帮助吗?

最佳答案

如果您查看例如this std::regex constructor reference您会看到仅采用字符串的构造函数(列表中的第二个构造函数)被标记为 explicit。这意味着您必须显式使用该构造函数,您不能只希望将字符串转换为 std::regex 对象。

也就是说,解决方案就是这样定义和初始化对象

std::regex reg1{pattern};

关于c++ - 将字符串作为正则表达式模式输入传递。 (非标量误差),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35117223/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com