Using pcre (with JIT) instead of pcrecpp

This commit is contained in:
Felipe Zimmerle
2015-09-17 19:26:44 -03:00
parent ed86c24df6
commit 2451bf05d7
4 changed files with 25 additions and 18 deletions

View File

@@ -15,7 +15,7 @@
#include "utils/regex.h"
#include <pcrecpp.h>
#include <pcre.h>
#include <sys/socket.h>
#include <sys/types.h>
#include <netinet/in.h>
@@ -33,28 +33,28 @@ namespace Utils {
Regex::Regex(const std::string& pattern_)
: pattern(pattern_) {
const char *errptr = NULL;
int erroffset;
if (pattern.empty() == true) {
pattern.assign(".*");
}
m_pc = pcre_compile(pattern.c_str(), PCRE_DOTALL|PCRE_MULTILINE, &errptr, &erroffset, NULL);
m_pce = pcre_study(m_pc, PCRE_STUDY_JIT_COMPILE, &errptr);
}
int regex_search(const std::string& s, SMatch *match,
const Regex& regex) {
std::string m;
pcrecpp::RE re(regex.pattern,
pcrecpp::RE_Options(PCRE_DOTALL|PCRE_MULTILINE));
/** FIXME: Should be not necessary to call PartialMatch twice here. */
match->size_ = re.PartialMatch(s);
re.PartialMatch(s, &m);
match->match = m;
return match->size_;
int *ovector = 0;
int ovecsize = 0;
return pcre_exec(regex.m_pc, regex.m_pce, s.c_str(), s.size(), 0, 0, ovector, ovecsize) > 0;
}
int regex_search(const std::string& s, Regex regex) {
pcrecpp::RE re(regex.pattern);
return re.PartialMatch(s);
int regex_search(const std::string& s, const Regex& regex) {
int *ovector = 0;
int ovecsize = 0;
return pcre_exec(regex.m_pc, regex.m_pce, s.c_str(), s.size(), 0, 0, ovector, ovecsize) > 0;
}
} // namespace Utils

View File

@@ -16,6 +16,7 @@
#include <iostream>
#include <fstream>
#include <string>
#include <pcre.h>
#ifndef SRC_UTILS_REGEX_H_
#define SRC_UTILS_REGEX_H_
@@ -29,6 +30,9 @@ class Regex {
public:
explicit Regex(const std::string& pattern_);
std::string pattern;
pcre *m_pc = NULL;
pcre_extra *m_pce = NULL;
};
@@ -44,7 +48,7 @@ class SMatch {
int regex_search(const std::string& s, SMatch *m,
const Regex& regex);
int regex_search(const std::string& s, Regex r);
int regex_search(const std::string& s, const Regex& r);