BALL  1.4.1
regularExpression.h
Go to the documentation of this file.
00001 // -*- Mode: C++; tab-width: 2; -*-
00002 // vi: set ts=2:
00003 //
00004 
00005 #ifndef BALL_DATATYPE_REGULAREXPRESSION_H
00006 #define BALL_DATATYPE_REGULAREXPRESSION_H
00007 
00008 #ifndef BALL_COMMON_H
00009 # include <BALL/common.h>
00010 #endif
00011 
00012 #ifdef BALL_HAS_BOOST_REGEX
00013 # include <boost/regex.h>
00014 #else
00015 // for SGI CC: turn of warnings #1174: function "regcomp" was declared but never referenced
00016 #if !defined(__GNUC__) && !defined(__KAI__) && defined(IRIX)
00017 # pragma set woff 1174
00018 #endif
00019 
00020 #ifdef BALL_HAS_SYS_TYPES_H
00021 # include <sys/types.h>
00022 #endif
00023 
00024 #ifdef BALL_HAS_REGEX_H
00025   // make sure __STDC__ is set when including the
00026   // GNU regex headers under Windows
00027 # ifdef BALL_COMPILER_MSVC
00028 #   define __STDC__ 1
00029     extern "C" {
00030 # endif
00031 #     include <regex.h>
00032 # ifdef BALL_COMPILER_MSVC
00033     }
00034 # endif
00035 #endif
00036 
00037 #endif
00038 
00039 #if !defined(__GNUC__) && !defined(__KAI__) && defined(IRIX)
00040 # pragma reset woff 1174
00041 #endif
00042 
00043 #ifndef BALL_DATATYPE_STRING_H
00044 # include <BALL/DATATYPE/string.h>
00045 #endif
00046 
00047 #define BALL_REGULAR_EXPRESSION_DEFAULT_PATTERN   ""
00048 
00049 namespace BALL 
00050 {
00054   class BALL_EXPORT RegularExpression
00055   {
00056     public:
00057 
00058     BALL_CREATE(RegularExpression)
00059 
00060     
00063       
00064     
00066     static const String ALPHA;
00067 
00070     static const String ALPHANUMERIC;
00071 
00074     static const String REAL;
00075 
00078     static const String IDENTIFIER;
00079 
00082     static const String INTEGER;
00083 
00086     static const String HEXADECIMAL_INTEGER;
00087 
00090     static const String LOWERCASE;
00091 
00094     static const String NON_ALPHA;
00095 
00098     static const String NON_ALPHANUMERIC;
00099 
00102     static const String NON_NUMERIC;
00103 
00106     static const String NON_WHITESPACE;
00107 
00110     static const String UPPERCASE;
00111 
00114     static const String WHITESPACE;
00116 
00120       
00122     RegularExpression();
00123 
00125     RegularExpression(const RegularExpression& regular_expression);
00126 
00128     RegularExpression(const String& pattern, bool wildcard_pattern = false);
00129 
00131     virtual ~RegularExpression();
00132 
00134     virtual void clear();
00135 
00137     void destroy();
00139 
00143 
00145     RegularExpression& operator = (const RegularExpression& expression);
00146 
00148     void set(const RegularExpression& regular_expression);
00149 
00151     void set(const String& pattern, bool wildcard_pattern = false);
00152 
00154     void get(RegularExpression& regular_expression) const;
00156 
00160 
00162     const String& getPattern() const;
00163 
00165     Size countSubexpressions() const;
00166 
00174     static bool match(const char* text, const char* pattern,
00175                       int compile_flags = 0 | REG_EXTENDED | REG_NOSUB, int execute_flags = 0);
00176     
00184     bool match(const String& text, Index from = 0, int execute_flags = 0) const;
00185   
00194     bool match(const Substring& text, Index from = 0, int execute_flags = 0) const;
00195   
00201     bool match(const char* text, int execute_flags = 0) const;
00202   
00210     bool find(const String& text, Substring& found,
00211               Index from = 0, int execute_flags = 0) const;
00212       
00221     bool find(const String& text, vector<Substring>& subexpressions,
00222               Index from = 0, int execute_flags = 0) const;
00223             
00225 
00228 
00231     bool isEmpty() const;
00232 
00235     bool operator == (const RegularExpression& regular_expression) const;
00236 
00239     bool operator != (const RegularExpression& regular_expression) const;
00240 
00243     bool operator < (const RegularExpression& regular_expression) const;
00244 
00247     bool operator <= (const RegularExpression& regular_expression) const;
00248 
00251     bool operator >= (const RegularExpression& regular_expression) const;
00252 
00255     bool operator > (const RegularExpression& regular_expression) const;
00256 
00258 
00261 
00264     virtual bool isValid() const;
00265 
00271     virtual void dump(std::ostream& s = std::cout, Size depth = 0) const;
00272 
00274 
00277 
00280     BALL_EXPORT
00281     friend std::ostream& operator << (std::ostream& s, const RegularExpression& regular_expression);
00282 
00285     BALL_EXPORT
00286     friend std::istream& operator >> (std::istream& s, RegularExpression& regular_expression);
00287 
00289     
00290     private:
00291 
00292     void compilePattern_();
00293 
00294     void toExtendedRegularExpression_();
00295 
00296     regex_t regex_;
00297     
00298     String  pattern_;
00299     bool    valid_pattern_;
00300   };
00301 
00302 # ifndef BALL_NO_INLINE_FUNCTIONS
00303 #   include <BALL/DATATYPE/regularExpression.iC>
00304 # endif
00305 } // namespace BALL
00306 
00307 #endif // BALL_DATATYPE_REGULAREXPRESSION_H
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Defines