您好,這是我的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