blob: ee85ce44ebc223725197ba514b41a2584d6a957b [file] [log] [blame]
#include <iostream>
#include <stdio.h>
#include "re2/re2.h"
using namespace re2;
extern "C" {
typedef void re2_regexp;
typedef struct re2_string {
const char *text;
int len;
} re2_string;
re2_regexp* re2_regexp_new(re2_string pat) {
re2::StringPiece re2_pat(pat.text, pat.len);
return reinterpret_cast<re2_regexp*>(new RE2(re2_pat));
}
void re2_regexp_free(re2_regexp *re) {
delete reinterpret_cast<RE2*>(re);
}
bool re2_regexp_match(re2_regexp *re, re2_string text,
int startpos, int endpos) {
RE2 *cpp_re = reinterpret_cast<RE2*>(re);
re2::StringPiece cpp_text(text.text, text.len);
return cpp_re->Match(cpp_text, startpos, endpos, RE2::UNANCHORED,
NULL, 0);
}
bool re2_regexp_find(re2_regexp *re, re2_string text,
int startpos, int endpos,
int *match_start, int *match_end) {
RE2 *cpp_re = reinterpret_cast<RE2*>(re);
re2::StringPiece cpp_text(text.text, text.len);
re2::StringPiece result;
bool matched = false;
matched = cpp_re->Match(cpp_text, startpos, endpos, RE2::UNANCHORED,
&result, 1);
if (matched) {
*match_start = result.data() - cpp_text.data();
*match_end = *match_start + result.length();
}
return matched;
}
}