[/ 
  Copyright 2006-2007 John Maddock.
  Distributed under the Boost Software License, Version 1.0.
  (See accompanying file LICENSE_1_0.txt or copy at
  http://www.boost.org/LICENSE_1_0.txt).
]


[section:old_regex High Level Class RegEx (Deprecated)]

The high level wrapper class RegEx is now deprecated and does not form 
part of the regular expression standardization proposal.  This type still 
exists, and existing code will continue to compile, however the following 
documentation is unlikely to be further updated.

   #include <boost/cregex.hpp>

The class RegEx provides a high level simplified interface to the regular 
expression library, this class only handles narrow character strings, and 
regular expressions always follow the "normal" syntax - that is the 
same as the perl / ECMAScript synatx.

   typedef bool (*GrepCallback)(const RegEx& expression);
   typedef bool (*GrepFileCallback)(const char* file, const RegEx& expression);
   typedef bool (*FindFilesCallback)(const char* file);

   class  RegEx
   {
   public:
      RegEx();
      RegEx(const RegEx& o);
      ~RegEx();
      RegEx(const char* c, bool icase = false);
      explicit RegEx(const std::string& s, bool icase = false);
      RegEx& operator=(const RegEx& o);
      RegEx& operator=(const char* p);
      RegEx& operator=(const std::string& s);
      unsigned int SetExpression(const char* p, bool icase = false);
      unsigned int SetExpression(const std::string& s, bool icase = false);
      std::string Expression()const;
      //
      // now matching operators: 
      // 
      bool Match(const char* p, boost::match_flag_type flags = match_default);
      bool Match(const std::string& s, boost::match_flag_type flags = match_default); 
      bool Search(const char* p, boost::match_flag_type flags = match_default); 
      bool Search(const std::string& s, boost::match_flag_type flags = match_default); 
      unsigned int Grep(GrepCallback cb, const char* p, 
                        boost::match_flag_type flags = match_default); 
      unsigned int Grep(GrepCallback cb, const std::string& s, 
                        boost::match_flag_type flags = match_default); 
      unsigned int Grep(std::vector<std::string>& v, const char* p, 
                        boost::match_flag_type flags = match_default); 
      unsigned int Grep(std::vector<std::string>& v, const std::string& s, 
                        boost::match_flag_type flags = match_default); 
      unsigned int Grep(std::vector<unsigned int>& v, const char* p, 
                        boost::match_flag_type flags = match_default); 
      unsigned int Grep(std::vector<unsigned int>& v, const std::string& s, 
                        boost::match_flag_type flags = match_default); 
      unsigned int GrepFiles(GrepFileCallback cb, const char* files, bool recurse = false, 
                             boost::match_flag_type flags = match_default); 
      unsigned int GrepFiles(GrepFileCallback cb, const std::string& files, 
                             bool recurse = false, 
                             boost::match_flag_type flags = match_default); 
      unsigned int FindFiles(FindFilesCallback cb, const char* files, 
                             bool recurse = false, 
                             boost::match_flag_type flags = match_default); 
      unsigned int FindFiles(FindFilesCallback cb, const std::string& files, 
                             bool recurse = false, 
                             boost::match_flag_type flags = match_default); 
      std::string Merge(const std::string& in, const std::string& fmt, 
                        bool copy = true, boost::match_flag_type flags = match_default); 
      std::string Merge(const char* in, const char* fmt, bool copy = true, 
                        boost::match_flag_type flags = match_default); 
      unsigned Split(std::vector<std::string>& v, std::string& s, 
                     boost::match_flag_type flags = match_default, 
                     unsigned max_count = ~0); 
      // 
      // now operators for returning what matched in more detail: 
      // 
      unsigned int Position(int i = 0)const; 
      unsigned int Length(int i = 0)const; 
      bool Matched(int i = 0)const;
      unsigned int Line()const; 
      unsigned int Marks() const; 
      std::string What(int i)const; 
      std::string operator[](int i)const ; 

      static const unsigned int npos;
   };    

Member functions for class RegEx are defined as follows:
 
[table
[[Member][Description]]
[[`RegEx();`][Default constructor, constructs an instance of RegEx without any valid expression. 	 ]]
[[`RegEx(const RegEx& o);`][Copy constructor, all the properties of parameter /o/ 
         are copied. 	 ]]
[[`RegEx(const char* c, bool icase = false);`][Constructs an instance of RegEx, 
         setting the expression to /c/, if /icase/ is true then matching is 
         insensitive to case, otherwise it is sensitive to case. Throws 
         [bad_expression] on failure. 	 ]]
[[`RegEx(const std::string& s, bool icase = false);`][Constructs an instance of 
         RegEx, setting the expression to /s/, if /icase/ is true then matching 
         is insensitive to case, otherwise it is sensitive to case. Throws 
         [bad_expression] on failure. 	 ]]
[[`RegEx& operator=(const RegEx& o);`][Default assignment operator. 	 ]]
[[`RegEx& operator=(const char* p);`][Assignment operator, equivalent to calling 
         `SetExpression(p, false)`. Throws [bad_expression] on failure. 	 ]]
[[`RegEx& operator=(const std::string& s);`][Assignment operator, equivalent to 
         calling `SetExpression(s, false)`. Throws [bad_expression] on failure. 	 ]]
[[`unsigned int SetExpression(constchar* p, bool icase = false);`][Sets the 
         current expression to /p/, if /icase/ is true then matching is 
         insensitive to case, otherwise it is sensitive to case. 
         Throws [bad_expression] on failure. 	 ]]
[[`unsigned int SetExpression(const std::string& s, bool icase = false);`]
         [Sets the current expression to /s/, if /icase/ is true then matching is 
         insensitive to case, otherwise it is sensitive to case. Throws 
         [bad_expression] on failure. 	 ]]
[[`std::string Expression()const;`][Returns a copy of the current regular expression. 	 ]]
[[`bool Match(const char* p, boost::match_flag_type flags = match_default);`]
         [Attempts to match the current expression against the text /p/ using 
         the match flags /flags/ - see [match_flag_type]. Returns /true/ if the 
         expression matches the whole of the input string. 	 ]]
[[`bool Match(const std::string& s, boost::match_flag_type flags = match_default);`]
         [Attempts to match the current expression against the text /s/ using 
         the [match_flag_type] /flags/. Returns /true/ if the expression matches 
         the whole of the input string. 	 ]]
[[`bool Search(const char* p, boost::match_flag_type flags = match_default);`]
         [Attempts to find a match for the current expression somewhere in 
         the text /p/ using the [match_flag_type] /flags/. Returns /true/ 
         if the match succeeds. 	 ]]
[[`bool Search(const std::string& s, boost::match_flag_type flags = match_default);`]
         [Attempts to find a match for the current expression somewhere in the 
         text /s/ using the [match_flag_type] flags. Returns /true/ if the 
         match succeeds. 	 ]]
[[`unsigned int Grep(GrepCallback cb, const char* p, boost::match_flag_type flags = match_default);`]
         [Finds all matches of the current expression in the text /p/ using the 
         [match_flag_type] /flags/. For each match found calls the call-back 
         function cb as: `cb(*this);`
         If at any stage the call-back function returns /false/ then the grep 
         operation terminates, otherwise continues until no further matches 
         are found. Returns the number of matches found.]]
[[`unsigned int Grep(GrepCallback cb, const std::string& s, boost::match_flag_type flags = match_default);`]
         [Finds all matches of the current expression in the text /s/ using the 
         [match_flag_type] flags. For each match found calls the call-back 
         function cb as: `cb(*this);`
         If at any stage the call-back function returns false then the grep operation 
         terminates, otherwise continues until no further matches are found. 
         Returns the number of matches found.]]
[[`unsigned int Grep(std::vector<std::string>& v, const char* p, boost::match_flag_type flags = match_default);`]
         [Finds all matches of the current expression in the text /p/ using the 
         [match_flag_type] flags. For each match pushes a copy of what matched 
         onto /v/. Returns the number of matches found. 	 ]]
[[`unsigned int Grep(std::vector<std::string>& v, const std::string& s, boost::match_flag_type flags = match_default);`]
         [Finds all matches of the current expression in the text /s/ using the 
         [match_flag_type] /flags/. For each match pushes a copy of what 
         matched onto /v/. Returns the number of matches found. 	 ]]
[[`unsigned int Grep(std::vector<unsigned int>& v, const char* p, boost::match_flag_type flags = match_default);`]
         [Finds all matches of the current expression in the text /p/ using the 
         [match_flag_type] /flags/. For each match pushes the starting index of 
         what matched onto /v/. Returns the number of matches found. 	 ]]
[[`unsigned int Grep(std::vector<unsigned int>& v, const std::string& s, boost::match_flag_type flags = match_default);`]
         [Finds all matches of the current expression in the text /s/ using the 
         [match_flag_type] /flags/. For each match pushes the starting index of what 
         matched onto /v/. Returns the number of matches found. 	 ]]
[[`unsigned int GrepFiles(GrepFileCallback cb, const char* files, bool recurse = false, boost::match_flag_type flags = match_default);`]
         [Finds all matches of the current expression in the files files using 
         the [match_flag_type] /flags/. For each match calls the call-back function cb. 
         If the call-back returns false then the algorithm returns without 
         considering further matches in the current file, or any further files. 
         
         The parameter /files/ can include wild card characters '\*' and '\?', if 
         the parameter recurse is true then searches sub-directories for matching 
         file names. 

         Returns the total number of matches found.

         May throw an exception derived from `std::runtime_error` if file io fails.]]
[[`unsigned int GrepFiles(GrepFileCallback cb, const std::string& files, bool recurse = false, boost::match_flag_type flags = match_default);`]
         [Finds all matches of the current expression in the files files using the 
         [match_flag_type] /flags/. For each match calls the call-back function cb. 

         If the call-back returns false then the algorithm returns without 
         considering further matches in the current file, or any further files. 

         The parameter /files/ can include wild card characters '\*' and '\?', if 
         the parameter recurse is true then searches sub-directories for 
         matching file names. 

         Returns the total number of matches found.

         May throw an exception derived from `std::runtime_error` if file io fails.]]
	 
[[`unsigned int FindFiles(FindFilesCallback cb, const char* files, bool recurse = false, boost::match_flag_type flags = match_default);`]
         [Searches files to find all those which contain at least one match of 
         the current expression using the [match_flag_type] /flags/. For each 
         matching file calls the call-back function cb. 
         If the call-back returns false then the algorithm returns without 
         considering any further files. 

         The parameter /files/ can include wild card characters '\*' and '\?', if 
         the parameter /recurse/ is true then searches sub-directories for 
         matching file names. 

         Returns the total number of files found.

         May throw an exception derived from `std::runtime_error` if file io fails.]]
[[`unsigned int FindFiles(FindFilesCallback cb, const std::string& files, bool recurse = false, boost::match_flag_type flags = match_default);`]
         [Searches files to find all those which contain at least one 
         match of the current expression using the [match_flag_type] /flags/. 
         For each matching file calls the call-back function cb. 

         If the call-back returns false then the algorithm returns without 
         considering any further files. 

         The parameter /files/ can include wild card characters '\*' and '\?', if 
         the parameter /recurse/ is true then searches sub-directories for 
         matching file names. 

         Returns the total number of files found.

         May throw an exception derived from `std::runtime_error` if file io fails.]]
         
[[`std::string Merge(const std::string& in, const std::string& fmt, bool copy = true, boost::match_flag_type flags = match_default);`]
         [Performs a search and replace operation: searches through the 
         string /in/ for all occurrences of the current expression, for each 
         occurrence replaces the match with the format string /fmt/. Uses /flags/ 
         to determine what gets matched, and how the format string should be 
         treated. If /copy/ is true then all unmatched sections of input are 
         copied unchanged to output, if the flag /format_first_only/ is set then 
         only the first occurance of the pattern found is replaced. 
         Returns the new string. See also 
         [link boost_regex.format format string syntax], and [match_flag_type].]]
[[`std::string Merge(const char* in, const char* fmt, bool copy = true, boost::match_flag_type flags = match_default);`]
         [Performs a search and replace operation: searches through the string /in/ 
         for all occurrences of the current expression, for each occurrence 
         replaces the match with the format string /fmt/. Uses /flags/ to determine 
         what gets matched, and how the format string should be treated. 
         If /copy/ is true then all unmatched sections of input are copied 
         unchanged to output, if the flag /format_first_only/ is set then only 
         the first occurance of the pattern found is replaced. Returns 
         the new string. See also [link boost_regex.format format string syntax], and [match_flag_type].]]
[[`unsigned Split(std::vector<std::string>& v, std::string& s, boost::match_flag_type flags = match_default, unsigned max_count = ~0);`]
         [Splits the input string and pushes each one onto the vector. 
         If the expression contains no marked sub-expressions, then one 
         string is outputted for each section of the input that does not 
         match the expression. If the expression does contain marked 
         sub-expressions, then outputs one string for each marked 
         sub-expression each time a match occurs. Outputs no more than 
         /max_count/ strings. Before returning, deletes from the input string 
         /s/ all of the input that has been processed (all of the string if 
         /max_count/ was not reached). Returns the number of strings pushed 
         onto the vector. 	 ]]
[[`unsigned int Position(int i = 0)const;`]
         [Returns the position of what matched sub-expression /i/. If `i = 0` 
         then returns the position of the whole match. Returns `RegEx::npos` if 
         the supplied index is invalid, or if the specified sub-expression 
         did not participate in the match. 	 ]]
[[`unsigned int Length(int i = 0)const;`]
         [Returns the length of what matched sub-expression i. If `i = 0` then 
         returns the length of the whole match. Returns `RegEx::npos` if the 
         supplied index is invalid, or if the specified sub-expression did not 
         participate in the match. 	 ]]
[[`bool Matched(int i = 0)const;`]
         [Returns true if sub-expression /i/ was matched, false otherwise. 	 ]]
[[`unsigned int Line()const;`][Returns the line on which the match occurred, 
         indexes start from 1 not zero, if no match occurred then returns `RegEx::npos`. 	 ]]
[[`unsigned int Marks() const;`][Returns the number of marked sub-expressions 
         contained in the expression. Note that this includes the whole 
         match (sub-expression zero), so the value returned is always >= 1. 	 ]]
[[`std::string What(int i)const;`]
         [Returns a copy of what matched sub-expression /i/. If `i = 0` then 
         returns a copy of the whole match. Returns a null string if the 
         index is invalid or if the specified sub-expression did not 
         participate in a match. 	 ]]
[[`std::string operator[](int i)const ;`][Returns `what(i);`
         Can be used to simplify access to sub-expression matches, and make 
         usage more perl-like.]]
]

[endsect]

