vc6.0下 使用boost regex正则表达式匹配带中文的任意字符
2013-12-05 20:15
267 查看
源代码:
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 CStri
9edc
ng &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;
}
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 CStri
9edc
ng &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;
}
相关文章推荐
- 设计一个程序,输出在顺序表中采用折半找法查找关键字的过程
- SharePoint 2013 图文开发系列之事件接收器
- Android利用Jsoup解析html 开发网站客户端小记。
- 信息收集
- 工厂三兄弟之抽象工厂模式(五)
- myeclipse中配置多个tomcat实例
- openwrt升级命令
- Git如何永久删除文件(包括历史记录)
- 工厂三兄弟之抽象工厂模式(四)
- Single Number II
- PHP_Excel
- Deep learning----------Self-taught learning
- dijstra算法
- Fabric.js在安装vs2012之后部分功能失效的解决办法
- socket阻塞,非阻塞,同步,异步的区别
- html5 canvas制作箭头
- 工厂三兄弟之抽象工厂模式(三)
- ubuntu下c/c++开发环境配置
- jquery 找到当前可见的元素并切换显示
- 工厂三兄弟之抽象工厂模式(二)