关于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多,最让我不能接收的是两点,不支持环视“?=”“?!=”“?<”“?!<”不支持指定要匹配字符的个数。最后,他是个仅仅支持查找操作的引擎,不支持替换操作!
------解决方案--------------------
#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多,最让我不能接收的是两点,不支持环视“?=”“?!=”“?<”“?!<”不支持指定要匹配字符的个数。最后,他是个仅仅支持查找操作的引擎,不支持替换操作!
------解决方案--------------------