00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017 #ifndef _regex_h
00018 #define _regex_h
00019
00020 #include <spl/types.h>
00021 #include <spl/Debug.h>
00022
00023 #include <spl/text/pcreposix.h>
00024 #include <spl/Memory.h>
00025 #include <spl/RefCountPtr.h>
00026 #include <spl/text/RegexOptions.h>
00027 #include <spl/String.h>
00028 #include <spl/WeakReference.h>
00029
00035 class Regex;
00036 typedef RefCountPtr<Regex> RegexPtr;
00037 typedef WeakReference<Regex, RegexPtr> RegexRef;
00038
00039 REGISTER_TYPEOF( 480, RegexPtr );
00040 REGISTER_TYPEOF( 482, RegexRef );
00041
00045 class Regex : public IMemoryValidate
00046 {
00047 private:
00048 String m_expr;
00049 RegexOptions::Options m_flags;
00050 regex_t m_regex;
00051
00052 void Compile();
00053
00054 public:
00055 Regex();
00056 Regex(const String& expr, RegexOptions::Options flags = RegexOptions::NONE);
00057 Regex(const Regex& re);
00058 virtual ~Regex();
00059
00060 Regex& operator =(const Regex& re);
00061
00062 bool IsMatch(const String& txt) const;
00063 RefCountPtr<Array<StringPtr> > Matches(const String& txt) const;
00064 StringPtr Match(const String& txt, int offset = 0) const;
00065
00066 #if defined(DEBUG)
00067 virtual void CheckMem() const;
00068 virtual void ValidateMem() const;
00069 #endif
00070 };
00071
00072 REGISTER_TYPEOF( 484, Regex );
00073
00076 #endif