regex_search 在處理特殊中文的時候會出錯。
直接上代碼:
#include <iostream> #include <string> #include <regex> int main () { std::string s ("this subject has a submarine as a subsequence"); std::smatch m; std::regex e ("\\b(sub)([^ ]*)"); // matches words beginning by "sub" std::string sx ("0,虞聖向其他玩家發送交易請求?,name:虞聖,mood:還沒想好!,petname:花仙子寶寶"); //std::smatch mx; //std::smatch mx_1; std::regex ex (".*玩.*服"); std::regex ex_1 (".*玩.*菔"); std::regex ex_2 (".*交.*易"); std::regex ex_3 (".*交.*上"); bool res = std::regex_search (sx,ex); std::cout <<res<< std::endl; bool res2 = std::regex_search (sx,ex_1); std::cout <<res2<< std::endl; bool res3 = std::regex_search (sx,ex_2); std::cout <<res3<< std::endl; bool res4 = std::regex_search (sx,ex_3); std::cout <<res4<< std::endl; /* while (std::regex_search (sx,mx,ex)) { for (auto x:mx) std::cout << x << " "; std::cout << std::endl; s = mx.suffix().str(); } std::cout << "Target sequence: " << s << std::endl; std::cout << "Regular expression: /\\b(sub)([^ ]*)/" << std::endl; std::cout << "The following matches and submatches were found:" << std::endl; while (std::regex_search (s,m,e)) { for (auto x:m) std::cout << x << " "; std::cout << std::endl; s = m.suffix().str(); } */ system("pause"); return 0; }
運行結果如下:

很奇怪微軟是怎么實現的,先mark下,等有時間了再去看源碼。
