关闭

vc6.0下 使用boost regex正则表达式匹配带中文的任意字符

514人阅读 评论(0) 收藏 举报
分类:

源代码:

boost::cmatch result2;

// 特殊字符".""\"从字符串转为正则表达式需要加"\",在正则表达式中要单纯的表示反斜杠字符页需要加"\",所以要匹配".\ "应该写为"\\.\\\\"
 CString csReg = "\\.\\\\(\\S+)\\.[tsp|enx|ts|tc|tsw]";  // 匹配 以  .\  开头 .tsp|.enx|.ts|.tc|.tsw 结尾的任意字符串,并获取匹配到的字符串
 boost::regex regText;
 regText = csReg;
 string sToMatch((LPCTSTR)csSourceStr);
 if ( !boost::regex_search(sToMatch,result2,regText))
 {
  return FALSE;
  }

  //下标从1开始, result2[0] 不正确
 for (size_t i = 1; i < result2.size(); ++i)  
 {         
  if (result2[i].matched)

   {
   std::string strIs(result2[i].first,result2[i].second);
   csDestStr = strIs.c_str();
  }
 }
 return TRUE;

 

测试代码未进行宽字符转换:

BOOL CSelectTestInstance::regexMatchStr(const CString &csSourceStr,CString &csDestStr)
{
 boost::cmatch result2;
 boost::regex regText("[A-Za-z0-9_\x80-\xFF]+");//如果匹配的字符串为./硬测自动化/自动化.tc ,匹配的结果只能匹配到“硬测自动化”,不知为何

 string sToMatch((LPCTSTR)csSourceStr);//csSourceStr = ./硬测自动化_A_1.tc
 if ( !boost::regex_search(sToMatch,result2,regText))
 {
     return FALSE;
  }
 for (size_t i = 0; i < result2.size(); ++i)  
 {         
  if (result2[i].matched)
   {
   std::string strIs(result2[i].first,result2[i].second);
   csDestStr = strIs.c_str();
   }
 }
 return TRUE;
}

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:8958次
    • 积分:194
    • 等级:
    • 排名:千里之外
    • 原创:10篇
    • 转载:5篇
    • 译文:0篇
    • 评论:0条
    文章存档