关于C++顶用正则表达式匹配字符的代码

关于C++中用正则表达式匹配字符的代码
#include <IOSTREAM>
#include <STRING>
#include <boost/regex.h>
#include <boost/regex.hpp>
using namespace std;
void main()
{
std::string regstr = "a+";//(?<=<title.*>.*(?=<\title>))
boost::regex expression(regstr);
std::string testString = "baabaaaba";
boost::smatch what;

if( boost::regex_match(testString, expression) )
{
//std::cout<< "Match" << std::endl;
for (int i=0;i<10;i++)
{
std::string msg(what[i].first,what[i].second);
std::cout<< i << ":" << msg.c_str() << std::endl;
}
}
else
{
std::cout<< "Not Match" << std::endl;
  }
}
问题1:按道理应该会匹配,为什么显示匹配不了。但我把std::string regstr = "a+"改成std::string regstr = ">*a+";就能匹配了

问题2:即使能匹配了还是显示不了获得的字符


------解决方案--------------------
不能匹配吧。match是完全匹配。

regex_match改为regex_search试试。 
------解决方案--------------------
lz可以考虑CAtlRegExp类,据说是最快的正则表达式匹配引擎,而且不需要引入第三方库,这是MS自带的ATL库里面实现的,缺点就是支持的元字符不如boost多,最让我不能接收的是两点,不支持环视“?=”“?!=”“?<”“?!<”不支持指定要匹配字符的个数。最后,他是个仅仅支持查找操作的引擎,不支持替换操作! 
------解决方案--------------------
探讨
std::string regstr = "(?<=<title>).*(?=<\\title>)";//给出正则表达式
std::string testString = "<title>哈哈<\title> <title>嘻嘻</title>";//给出需要匹配的字符串
问题1:循环匹配的时候 start = what[0].second;貌似没起到作用,所以后台输出的只有 Have digit:哈哈
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值