#include "testRegExp.h"
testRegExp::testRegExp( const char * pattern,
bool reg_extended,
bool reg_ignore_case,
bool reg_nosub,
bool reg_newline )
: flags_(0), reg_pattern_buf_(), iret_(0), nmatch_(0)
{
if ( reg_extended )
flags_ = REG_EXTENDED;
if ( reg_ignore_case )
flags_ |= REG_ICASE;
if ( reg_nosub )
flags_ |= REG_NOSUB;
if ( reg_newline )
flags_ |= REG_NEWLINE;
if ( pattern == 0 )
iret_ = regcomp( ®_pattern_buf_, "", flags_ );
else
iret_ = regcomp( ®_pattern_buf_, pattern, flags_ );
if ( iret_ == 0 )
{
nmatch_ = reg_pattern_buf_.re_nsub;
nmatch_ += 1;
}
else
{
char *tmp;
int size = regerror( iret_, ®_pattern_buf_, 0, 0 );
tmp = new char[size];
regerror( iret_, ®_pattern_buf_, tmp, size );
cerr << tmp << endl;
delete []tmp;
}
}
testRegExp::~testRegExp()
{
regfree( ®_pattern_buf_ );
}
int testRegExp::validate( const char * str2validate )
{
regmatch_t *regmatch = new regmatch_t[nmatch_];
for ( int i = 0; i < nmatch_; ++i )
{
regmatch[i].rm_so = -1;
regmatch[i].rm_eo = -1;
}
if ( str2validate == 0 ) str2validate = "";
iret_ = regexec( ®_pattern_buf_, str2validate, nmatch_, regmatch, 0 );
if ( 0 == iret_ )
{
cerr << "String matches !" << endl;
}
else if ( REG_NOMATCH == iret_ )
{
cerr << "String does not match !" << endl;
}
else
{
char *tmp;
int size = regerror( iret_, ®_pattern_buf_, 0, 0 );
tmp = new char[size];
regerror( iret_, ®_pattern_buf_, tmp, size );
cerr << tmp << endl;
delete []tmp;
}
delete []regmatch;
return iret_;
}