summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/Regex.h7
-rw-r--r--lib/Regex.cc21
2 files changed, 22 insertions, 6 deletions
diff --git a/include/Regex.h b/include/Regex.h
index 1fc7197..9c8d466 100644
--- a/include/Regex.h
+++ b/include/Regex.h
@@ -4,17 +4,18 @@
#include <Exceptions.h>
#include <String.h>
-
#include <regex.h>
class Regex : public Base {
public:
- Regex(const String &, int = REG_EXTENDED | REG_ICASE, int = 0) throw (GeneralException);
+ Regex(const String &, int = REG_EXTENDED, int = 0) throw (GeneralException);
+ Regex(const Regex &);
~Regex();
bool Match(const String &) const;
private:
regex_t preg;
- int eflags;
+ int cflags, eflags;
+ char * pattern;
};
extern Regex empty, any;
diff --git a/lib/Regex.cc b/lib/Regex.cc
index 9b70d68..3c566bd 100644
--- a/lib/Regex.cc
+++ b/lib/Regex.cc
@@ -2,18 +2,33 @@
char t[1024];
-Regex empty("$^"), any(".*");
+Regex empty("^$"), any(".*");
-Regex::Regex(const String & regex, int cflags, int aeflags) throw (GeneralException) : eflags(aeflags) {
+Regex::Regex(const String & regex, int acflags, int aeflags) throw (GeneralException) : cflags(acflags), eflags(aeflags), pattern(regex.strdup()) {
int r;
- if ((r = regcomp(&preg, regex.to_charp(), cflags | REG_NOSUB))) {
+
+ if ((r = regcomp(&preg, pattern, cflags | REG_NOSUB))) {
+ cerr << "Error in regcomp:";
regerror(r, &preg, t, sizeof(t));
+ cerr << t << endl;
throw GeneralException(String("Regex \"") + regex + "\" failed to compile: " + t + "\n");
}
}
+Regex::Regex(const Regex & regex) : pattern(Base::strdup(pattern)) {
+ int r;
+
+ if ((r = regcomp(&preg, pattern, cflags | REG_NOSUB))) {
+ cerr << "Error in regcomp:";
+ regerror(r, &preg, t, sizeof(t));
+ cerr << t << endl;
+ throw GeneralException(String("Regex \"") + pattern + "\" failed to compile: " + t + "\n");
+ }
+}
+
Regex::~Regex() {
regfree(&preg);
+ free(pattern);
}
bool Regex::Match(const String & s) const {