首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C++ std:regex如何修复error_complexity?

C++ std:regex如何修复error_complexity?
EN

Stack Overflow用户
提问于 2016-10-18 09:08:14
回答 1查看 1.4K关注 0票数 2

我使用std::regex来匹配字符串。

我对regex的定义是:

代码语言:javascript
复制
regex reg("(-?\\d+,?){2,}", regex::icase)

测试字符串是:

代码语言:javascript
复制
5,3240,7290,11340,-3240,-7290,-11340

我使用了regex_match()的性病功能。下面是我得到的错误。

regex_error(error_complexity):试图与正则表达式匹配的复杂性超过了预先设置的级别。

我怎样才能解决这个问题?我的编译器是VS2013。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-10-18 09:17:59

您可以将,?-containing组“展开”成一个更线性的模式,以降低复杂性-- ",?-?\\d+(?:,-?\\d+)+"

请参阅C++演示

代码语言:javascript
复制
#include <iostream>
#include <regex>
using namespace std;

int main() {
    regex reg(",?-?\\d+(?:,-?\\d+)+");
    string s("5,3240,7290,11340,-3240,-7290,-11340");
    if (regex_match(s, reg)) {
        std::cout << "Matched!"; 
    }
    return 0;
}

现在,模式匹配:

  • ,? -一个可选的逗号
  • -? -一个可选的连字符
  • \\d+ -1或更多位数
  • (?:,-?\\d+)+ -1或更多匹配的序列
    • , -逗号
    • -?\\d+ -见上文。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40104030

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档