1.1 --- a/extensions/regex/CRegEx.cpp Fri Mar 28 06:21:34 2008 +0000
1.2 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000
1.3 @@ -1,124 +0,0 @@
1.4 -#include "pcre.h"
1.5 -#include "CRegEx.h"
1.6 -#include <sh_string.h>
1.7 -#include "extension.h"
1.8 -
1.9 -RegEx::RegEx()
1.10 -{
1.11 - mErrorOffset = 0;
1.12 - mError = NULL;
1.13 - re = NULL;
1.14 - mFree = true;
1.15 - subject = NULL;
1.16 - mSubStrings = 0;
1.17 -}
1.18 -
1.19 -void RegEx::Clear ()
1.20 -{
1.21 - mErrorOffset = 0;
1.22 - mError = NULL;
1.23 - if (re)
1.24 - pcre_free(re);
1.25 - re = NULL;
1.26 - mFree = true;
1.27 - if (subject)
1.28 - delete [] subject;
1.29 - subject = NULL;
1.30 - mSubStrings = 0;
1.31 -}
1.32 -
1.33 -RegEx::~RegEx()
1.34 -{
1.35 - Clear();
1.36 -}
1.37 -
1.38 -bool RegEx::isFree(bool set, bool val)
1.39 -{
1.40 - if (set)
1.41 - {
1.42 - mFree = val;
1.43 - return true;
1.44 - } else {
1.45 - return mFree;
1.46 - }
1.47 -}
1.48 -
1.49 -int RegEx::Compile(const char *pattern, int iFlags)
1.50 -{
1.51 - if (!mFree)
1.52 - Clear();
1.53 -
1.54 - re = pcre_compile(pattern, iFlags, &mError, &mErrorOffset, NULL);
1.55 -
1.56 - if (re == NULL)
1.57 - {
1.58 - return 0;
1.59 - }
1.60 -
1.61 - mFree = false;
1.62 -
1.63 - return 1;
1.64 -}
1.65 -
1.66 -int RegEx::Match(const char *str)
1.67 -{
1.68 - int rc = 0;
1.69 -
1.70 - if (mFree || re == NULL)
1.71 - return -1;
1.72 -
1.73 - this->ClearMatch();
1.74 -
1.75 - //save str
1.76 - subject = new char[strlen(str)+1];
1.77 - strcpy(subject, str);
1.78 -
1.79 - rc = pcre_exec(re, NULL, subject, (int)strlen(subject), 0, 0, ovector, 30);
1.80 -
1.81 - if (rc < 0)
1.82 - {
1.83 - if (rc == PCRE_ERROR_NOMATCH)
1.84 - {
1.85 - return 0;
1.86 - } else {
1.87 - mErrorOffset = rc;
1.88 - return -1;
1.89 - }
1.90 - }
1.91 -
1.92 - mSubStrings = rc;
1.93 -
1.94 - return 1;
1.95 -}
1.96 -void RegEx::ClearMatch()
1.97 -{
1.98 - // Clears match results
1.99 - mErrorOffset = 0;
1.100 - mError = NULL;
1.101 - if (subject)
1.102 - delete [] subject;
1.103 - subject = NULL;
1.104 - mSubStrings = 0;
1.105 -}
1.106 -
1.107 -const char *RegEx::GetSubstring(int s, char buffer[], int max)
1.108 -{
1.109 - int i = 0;
1.110 - if (s >= mSubStrings || s < 0)
1.111 - return NULL;
1.112 -
1.113 - char *substr_a = subject + ovector[2*s];
1.114 - int substr_l = ovector[2*s+1] - ovector[2*s];
1.115 -
1.116 - for (i = 0; i<substr_l; i++)
1.117 - {
1.118 - if (i >= max)
1.119 - break;
1.120 - buffer[i] = substr_a[i];
1.121 - }
1.122 -
1.123 - buffer[i] = '\0';
1.124 -
1.125 - return buffer;
1.126 -}
1.127 -