summaryrefslogtreecommitdiff
path: root/TRexpp.h
diff options
context:
space:
mode:
Diffstat (limited to 'TRexpp.h')
-rw-r--r--TRexpp.h75
1 files changed, 75 insertions, 0 deletions
diff --git a/TRexpp.h b/TRexpp.h
new file mode 100644
index 0000000..e74d665
--- /dev/null
+++ b/TRexpp.h
@@ -0,0 +1,75 @@
+#ifndef _TREXPP_H_
+#define _TREXPP_H_
+/***************************************************************
+ T-Rex a tiny regular expression library
+
+ Copyright (C) 2003-2004 Alberto Demichelis
+
+ This software is provided 'as-is', without any express
+ or implied warranty. In no event will the authors be held
+ liable for any damages arising from the use of this software.
+
+ Permission is granted to anyone to use this software for
+ any purpose, including commercial applications, and to alter
+ it and redistribute it freely, subject to the following restrictions:
+
+ 1. The origin of this software must not be misrepresented;
+ you must not claim that you wrote the original software.
+ If you use this software in a product, an acknowledgment
+ in the product documentation would be appreciated but
+ is not required.
+
+ 2. Altered source versions must be plainly marked as such,
+ and must not be misrepresented as being the original software.
+
+ 3. This notice may not be removed or altered from any
+ source distribution.
+
+****************************************************************/
+
+extern "C" {
+#include "trex.h"
+}
+
+struct TRexParseException{TRexParseException(const TRexChar *c):desc(c){}const TRexChar *desc;};
+
+class TRexpp {
+public:
+ TRexpp() { _exp = (TRex *)0; }
+ ~TRexpp() { CleanUp(); }
+ // compiles a regular expression
+ void Compile(const TRexChar *pattern) {
+ const TRexChar *error;
+ CleanUp();
+ if(!(_exp = trex_compile(pattern,&error)))
+ throw TRexParseException(error);
+ }
+ // return true if the given text match the expression
+ bool Match(const TRexChar* text) {
+ return _exp?(trex_match(_exp,text) != 0):false;
+ }
+ // Searches for the first match of the expression in a zero terminated string
+ bool Search(const TRexChar* text, const TRexChar** out_begin, const TRexChar** out_end) {
+ return _exp?(trex_search(_exp,text,out_begin,out_end) != 0):false;
+ }
+ // Searches for the first match of the expression in a string sarting at text_begin and ending at text_end
+ bool SearchRange(const TRexChar* text_begin,const TRexChar* text_end,const TRexChar** out_begin, const TRexChar** out_end) {
+ return _exp?(trex_searchrange(_exp,text_begin,text_end,out_begin,out_end) != 0):false;
+ }
+ bool GetSubExp(int n, const TRexChar** out_begin, int *out_len)
+ {
+ TRexMatch match;
+ TRexBool res = _exp?(trex_getsubexp(_exp,n,&match)):TRex_False;
+ if(res) {
+ *out_begin = match.begin;
+ *out_len = match.len;
+ return true;
+ }
+ return false;
+ }
+ int GetSubExpCount() { return _exp?trex_getsubexpcount(_exp):0; }
+private:
+ void CleanUp() { if(_exp) trex_free(_exp); _exp = (TRex *)0; }
+ TRex *_exp;
+};
+#endif //_TREXPP_H_ \ No newline at end of file