Matcher.h

00001 #ifndef __MATCHER_H__
00002 #define __MATCHER_H__
00003 
00004 #include <string>
00005 #include <vector>
00006 
00007 class Vector;
00008 class NFANode;
00009 class NFAStartNode;
00010 class NFAEndNode;
00011 class NFAGroupHeadNode;
00012 class NFAGroupLoopNode;
00013 class NFAGroupLoopPrologueNode;
00014 class NFAGroupTailNode;
00015 class NFALookBehindNode;
00016 class NFAStartOfLineNode;
00017 class NFAEndOfLineNode;
00018 class NFAEndOfMatchNode;
00019 class NFAReferenceNode;
00020 class Pattern;
00021 
00035 class Matcher
00036 {
00037   friend class NFANode;
00038   friend class NFAStartNode;
00039   friend class NFAEndNode;
00040   friend class NFAGroupHeadNode;
00041   friend class NFAGroupLoopNode;
00042   friend class NFAGroupLoopPrologueNode;
00043   friend class NFAGroupTailNode;
00044   friend class NFALookBehindNode;
00045   friend class NFAStartOfLineNode;
00046   friend class NFAEndOfLineNode;
00047   friend class NFAEndOfMatchNode;
00048   friend class NFAReferenceNode;
00049   friend class Pattern;
00050   private:
00058     Matcher(Pattern * pattern, const std::string & text);
00059   protected:
00061     Pattern * pat;
00063     std::string str;
00065     int start;
00067     int * starts;
00069     int * ends;
00071     int * groups;
00073     int * groupIndeces;
00075     int * groupPos;
00077     int lm;
00079     int gc;
00081     int ncgc;
00083     int matchedSomething;
00085     unsigned long flags;
00087     void clearGroups();
00088   public:
00090     const static int MATCH_ENTIRE_STRING;
00091   public:
00093     ~Matcher();
00101     std::string replaceWithGroups(const std::string & str);
00106     unsigned long getFlags() const;
00111     std::string getText() const;
00112 
00120     bool matches();
00129     bool findFirstMatch();
00138     bool findNextMatch();
00145     std::vector<std::string> findAll();
00149     void reset();
00154     inline std::string  getString()                           const { return str; }
00159     inline void         setString(const std::string & newStr)       { str = newStr; reset(); }
00160 
00167     int getStartingIndex(const int groupNum = 0) const;
00174     int getEndingIndex(const int groupNum = 0) const;
00183     std::string getGroup(const int groupNum = 0) const;
00190     std::vector<std::string> getGroups(const bool includeGroupZero = 0) const;
00191 
00196     int getGroupNum() {return gc;}
00197 };
00198 
00199 #endif

Generated on Fri Apr 27 13:12:36 2007 for Highlight Code Converter by  doxygen 1.5.2