您好,这是我的C++的正则表达式C++正则表达式速度优化
regex MyRGX(R"~((\w*)\s*[(]([^;]*)[)]\s*[;])~");
,这是我的字符串
Data1 (
anything1
);
这个表达式得到 Data1
和();
之间存在的任何条件的一切。但是当我有超过50个块像Data1
,这个正则表达式的搜索速度将低于相当于pcre的正则表达式。我认为这是我的正则表达式,并非针对速度进行优化。你有任何建议,以提高这个条件的正则表达式的速度(得到一切存在之间();
和...)?
您的字符串看起来不像我的字符串。 – nwp
你只是认为是。 – Elh48
我的建议:尽可能使用非捕获组('(?:)'而不是'()')。如果可能,请使用'+'而不是'*'(因为'*'匹配空字符串,与'+'相比,有更多可能的分支需要探索)。最后,您可以在[构造函数](http://en.cppreference.com/w/)中使用['optimize'标志](http://en.cppreference.com/w/cpp/regex/basic_regex) cpp/regex/basic_regex/basic_regex)来获得更优化的正则表达式(以较慢的构造为代价)。我可能会建议'regex r(R“〜((\ w +)\ s * [(]([^;] *)[)] \ s * [;])〜”,regex_constants :: optimize | regex_constants :: ECMAScript );'。 – Cornstalks