我曾经std::regex
匹配过一个字符串。
我对正则表达式的定义是:
regex reg("(-?\\d+,?){2,}", regex::icase)
测试字符串是:
5,3240,7290,11340,-3240,-7290,-11340
我使用的std函数regex_match()
。以下是我得到的错误。
regex_error(error_complexity):尝试与正则表达式进行匹配的复杂性超过了预设水平。
我该如何解决该问题?我的编译器是VS2013。
您可以将包含,?
的组“展开”为更线性的模式以降低复杂度- ",?-?\\d+(?:,-?\\d+)+"
。
参见C ++演示:
#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+
- 看上面。本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句