1: #include "testRegExp.h" 
   2: 
   3: 
   4: /////////////////////////////////////////////////////////////////////////////
   5: //
   6: /////////////////////////////////////////////////////////////////////////////
   7: testRegExp::testRegExp( const char * pattern, 
   8:         bool reg_extended, 
   9:         bool reg_ignore_case, 
  10:         bool reg_nosub,
  11:         bool reg_newline ) 
  12: 	     : flags_(0), reg_pattern_buf_(), iret_(0), nmatch_(0)
  13: {
  14:     if ( reg_extended )
  15:         flags_ = REG_EXTENDED;
  16:     if ( reg_ignore_case )
  17:         flags_ |= REG_ICASE;
  18:     if ( reg_nosub )
  19:         flags_ |= REG_NOSUB;
  20:     if ( reg_newline )
  21:         flags_ |= REG_NEWLINE;
  22: 
  23:     if ( pattern == 0 )
  24:         iret_ = regcomp( ®_pattern_buf_, "", flags_ );
  25:     else
  26:         iret_ = regcomp( ®_pattern_buf_, pattern, flags_ );
  27: 	
  28: 	if ( iret_ == 0 )
  29: 	    {
  30: 	    nmatch_ = reg_pattern_buf_.re_nsub;
  31: 	    nmatch_ += 1;
  32: 	    }
  33:     else
  34:       {
  35:       char *tmp;
  36:       int size = regerror( iret_, ®_pattern_buf_, 0, 0 );
  37:       tmp = new char[size];
  38:       regerror( iret_, ®_pattern_buf_, tmp, size );
  39:       cerr << tmp << endl;
  40:       delete []tmp;
  41: 	   }
  42: }
  43: /////////////////////////////////////////////////////////////////////////////
  44: //
  45: /////////////////////////////////////////////////////////////////////////////
  46: testRegExp::~testRegExp() 
  47: {
  48:     regfree( ®_pattern_buf_ );
  49: }
  50: 
  51: /////////////////////////////////////////////////////////////////////////////
  52: //
  53: /////////////////////////////////////////////////////////////////////////////
  54: int testRegExp::validate( const char * str2validate )
  55: {
  56:     regmatch_t *regmatch = new regmatch_t[nmatch_];
  57:     for ( int i = 0; i < nmatch_; ++i )
  58:         {
  59:         regmatch[i].rm_so = -1;
  60:         regmatch[i].rm_eo = -1;
  61:         }
  62: 	
  63:     if ( str2validate == 0 ) str2validate = "";
  64: 	
  65:     iret_ = regexec( ®_pattern_buf_, str2validate, nmatch_, regmatch, 0 );
  66: 
  67:     if ( 0 == iret_ )
  68:         {
  69:         cerr << "String matches !" << endl;
  70:         }
  71:     else if ( REG_NOMATCH == iret_ )
  72:         {
  73:         cerr << "String does not match !" << endl;
  74:         }
  75:     else
  76:         {
  77:         char *tmp;
  78:         int size = regerror( iret_, ®_pattern_buf_, 0, 0 );
  79:         tmp = new char[size];
  80:         regerror( iret_, ®_pattern_buf_, tmp, size );
  81:         cerr << tmp << endl;
  82:         delete []tmp;	    
  83:         }
  84: 
  85:     delete []regmatch;
  86: 
  87:     return iret_;
  88: }
  89: 
  90: