#include <iostream>
#include <boost/regex.hpp>
#include <boost/lexical_cast.hpp>
#include <boost/algorithm/string.hpp>
#define DEMO_EXPRESSION "^select ([a-zA-Z]*) from ([a-zA-Z]*)$"
/**
* Simple test if string match the regular expression.
*
* @param str Input string be testing.
* @param regStr Regular expression.
* @return true when matched, else return false.
*/
bool isMatched(const std::string &str, const std::string ®Str)
{
boost::regex reg(regStr);
bool rc = boost::regex_match(str, reg);
if(rc)
{
std::cout << "String matched: " << str << std::endl;
}
else
{
std::cout << "String not matched: " << str << std::endl;
}
return rc;
}
/**
* Match string and print result.
*
* @param str Input string be testing.
* @param regStr Regular expression.
* @return true when matched, else return false.
*/
bool getMatched(const std::string &str, const std::string ®Str)
{
boost::cmatch what;
boost::regex reg(regStr);
if(boost::regex_match(str.c_str(), what, reg))
{
std::cout << "Matched Size: " << what.size() << std::endl;
for (int i = 0; i < what.size(); i++)
{
if(what[i].matched)
{
std::cout << "Matched string: " << what[i].str() << std::endl;
}
}
return true;
}
std::cout << "Not matched: " << str << std::endl;
return false;
}
int main()
{
std::string goodStr = "select name from table";
std::string badStr = "select name xxxx table";
isMatched(goodStr, DEMO_EXPRESSION);
isMatched(badStr, DEMO_EXPRESSION);
getMatched(goodStr, DEMO_EXPRESSION);
getMatched(badStr, DEMO_EXPRESSION);
}
Output:
String matched: select name from table
String not matched: select name xxxx table
Matched Size: 3
Matched string: select name from table
Matched string: name
Matched string: table
Not matched: select name xxxx table