![]()
|
pcre++.hGo to the documentation of this file.00001 /*
00002 *
00003 * $Id: pcre++.h,v 1.1.1.1 2001/12/30 04:01:36 zarahg Exp $
00004 *
00005 * This file is part of the PCRE++ Class Library.
00006 *
00007 * By accessing this software, PCRE++, you are duly informed
00008 * of and agree to be bound by the conditions described below
00009 * in this notice:
00010 *
00011 * This software product, PCRE++, is developed by Thomas Linden
00012 * and copyrighted (C) 2002 by Thomas Linden, with all rights
00013 * reserved.
00014 *
00015 * There is no charge for PCRE++ software. You can redistribute
00016 * it and/or modify it under the terms of the GNU Lesser General
00017 * Public License, which is incorporated by reference herein.
00018 *
00019 * PCRE++ is distributed WITHOUT ANY WARRANTY, IMPLIED OR EXPRESS,
00020 * OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE or that
00021 * the use of it will not infringe on any third party's intellec-
00022 * tual property rights.
00023 *
00024 * You should have received a copy of the GNU Lesser General Public
00025 * License along with PCRE++. Copies can also be obtained from:
00026 *
00027 * http://www.gnu.org/licenses/lgpl.txt
00028 *
00029 * or by writing to:
00030 *
00031 * Free Software Foundation, Inc.
00032 * 59 Temple Place, Suite 330
00033 * Boston, MA 02111-1307
00034 * USA
00035 *
00036 * Or contact:
00037 *
00038 * "Thomas Linden" <tom@daemon.de>
00039 *
00040 *
00041 */
00042
00043 #ifndef HAVE_PCRE_PP_H
00044 #define HAVE_PCRE_PP_H
00045
00046 #include <string>
00047 #include <sstream>
00048 #include <vector>
00049 #include <stdexcept>
00050
00051 extern "C" {
00052 #include <pcre.h>
00053 }
00054
00055
00056 using namespace std;
00057
00059 typedef vector<string> Array;
00060
00062 typedef vector<string>::iterator ArrayIterator;
00063
00091 class Pcre {
00092 private:
00093 string _expression; /* the given regular expression */
00094 unsigned int _flags; /* the given flags, 0 if not defined */
00095 bool case_t, global_t; /* internal compile flags, used by replace() and split() */
00096 pcre *p_pcre; /* pcre object pointer */
00097 pcre_extra *p_pcre_extra; /* stuff required by pcre lib */
00098 int sub_len;
00099 int *sub_vec;
00100 int erroffset;
00101 char *err_str;
00102 Array *resultset; /* store substrings, if any */
00103
00104 /* reset all counters and free objects, prepare for another search */
00105 void reset();
00106
00107 /* compile the pattern */
00108 void Compile(int flags);
00109
00110 /* do the actual search, will be called by the public ::search(..) methods */
00111 bool dosearch(const string& stuff, int OffSet);
00112
00113 /* do the actual split() job, called by the various wrapper split() methods */
00114 Array _split(const string& piece, int limit, int start_offset, int end_offset);
00115
00116 /* replace $1 .. $n with the corresponding substring, used by replace() */
00117 string _replace_vars(const string& piece);
00118
00119 /* init pointers with NULL */
00120 void Pcre::zero();
00121
00122 public:
00123
00141 class exception : public runtime_error {
00142 private:
00143 string translate(int num) {
00144 string msg;
00145 switch(num) {
00146 case -1: msg = "PCRE_ERROR_NOMATCH"; break;
00147 case -2: msg = "PCRE_ERROR_NULL"; break;
00148 case -3: msg = "PCRE_ERROR_BADOPTION"; break;
00149 case -4: msg = "PCRE_ERROR_BADMAGIC"; break;
00150 case -5: msg = "PCRE_ERROR_UNKNOWN_NODE"; break;
00151 case -6: msg = "PCRE_ERROR_NOMEMORY"; break;
00152 case -7: msg = "PCRE_ERROR_NOSUBSTRING"; break;
00153 }
00154 return msg;
00155 }
00156 public:
00157 exception(const string & msg) : runtime_error(msg) { }
00158 exception(int num) : runtime_error(translate(num)) { }
00159 };
00160
00161
00162 bool did_match;
00163 int num_matches;
00176 Pcre();
00177
00186 Pcre(const string& expression);
00187
00213 Pcre(const string& expression, const string& flags);
00214
00222 Pcre(const Pcre &P);
00223
00234 const Pcre& operator = (const string& expression);
00235
00248 const Pcre& operator = (const Pcre &P);
00249
00255 ~Pcre();
00256
00263 bool search(const string& stuff);
00264
00272 bool search(const string& stuff, int OffSet);
00273
00278 Array* get_sub_strings();
00279
00294 string get_match(int pos);
00295
00316 int get_match_start(int pos);
00317
00338 int get_match_end(int pos);
00339
00340
00341
00342
00361 int get_match_start();
00362
00382 int get_match_end();
00383
00384
00385
00386
00394 size_t get_match_length(int pos);
00395
00400 bool matched() { return did_match; };
00401
00405 int matches() { return num_matches; };
00406
00419 Array split(const string& piece);
00420
00434 Array split(const string& piece, int limit);
00435
00450 Array split(const string& piece, int limit, int start_offset);
00451
00467 Array split(const string& piece, int limit, int start_offset, int end_offset);
00468
00482 Array split(const string& piece, vector<int> positions);
00483
00492 string replace(const string& piece, const string& with);
00493 };
00494
00495 #endif
Generated on Tue Jul 16 22:14:38 2002 for PCRE++ by 1.2.13.1 written by Dimitri van Heesch,
© 1997-2001
|