gpt4 book ai didi

c++ - 如何在C++中匹配以 '!'开头的十进制数

转载 作者:行者123 更新时间:2023-11-30 03:27:27 25 4
gpt4 key购买 nike

如何匹配所有以“!”开头的十进制数字? (bang) 在给定的字符串中?我已经编写了以下代码,但它因断言而失败

#include<iostream>
#include<regex>

int main()
{
std::string s1("{!112,2,3}");
std::regex e(R"(\!\d+)", std::regex::grep);

std::cout << s1 << std::endl;

std::sregex_iterator iter(s1.begin(), s1.end(), e);
std::sregex_iterator end;

while(iter != end)
{
std::cout << "size: " << iter->size() << std::endl;

for(unsigned i = 0; i < iter->size(); ++i)
{
std::cout << "the " << i + 1 << "th match" << ": " << (*iter)[i] << std::endl;
}
++iter;
}
}

断言

terminate called after throwing an instance of 'std::regex_error'
what(): regex_error
Aborted (core dumped)

最佳答案

首先,确保您使用的是最新的 GCC 编译器。

然后使用 R"(!(\d+))" 匹配感叹号的模式,然后将一个或多个数字捕获到第 1 组中。

然后只需在迭代匹配时获取包含您的值的 (*i​​ter)[1]

参见 C++ demo :

#include<iostream>
#include<regex>
int main() {
std::string s1("{!112,2,3} {!346,765,8}");
std::regex e(R"(!(\d+))");
std::cout << s1 << std::endl;
std::sregex_iterator iter(s1.begin(), s1.end(), e); std::sregex_iterator end;
while(iter != end) {
std::cout << "Value: " << (*iter)[1] << std::endl;
++iter;
}
}

输出:

{!112,2,3} {!346,765,8} 
Value: 112
Value: 346

关于c++ - 如何在C++中匹配以 '!'开头的十进制数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47355091/

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