【C++】regex_search 匹配字符串出錯


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下,等有時間了再去看源碼。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM