RE2Regex(const char* string, unsigned int options): casefold(false) { RE2::Options opts; opts.set_posix_syntax(true); opts.set_perl_classes(true); opts.set_word_boundary(true); opts.set_one_line(false); opts.set_never_nl(true); opts.set_literal((options & RO_LITERAL) != 0); opts.set_log_errors(false); std::string pattern; if ((options & RO_IGNORECASE) && transformRegexCasefold(string, pattern, (options & RO_LITERAL) != 0)) { casefold = true; } else { pattern = string; opts.set_case_sensitive((options & RO_IGNORECASE) == 0); } re.reset(new RE2(pattern, opts)); if (!re->ok()) throw std::runtime_error("Error parsing regular expression " + (string + (": " + re->error()))); std::string prefix = getPrefix(re.get(), 128); if (prefix.length() == 1) matcher.reset(new LiteralMatcherFirst(prefix.c_str())); #ifdef USE_SSE2 else if (prefix.length() > 1) matcher.reset(new LiteralMatcherSSE(prefix.c_str())); #endif }
static void cpy_options(RE2::Options &options, JNIEnv *env, jobject j_options) { assert(j_options != 0); jclass j_options_cls = env->GetObjectClass(j_options); options.set_encoding(get_re2_encoding(env, env->GetObjectField(j_options, get_field_id_safe(env, j_options_cls, "encoding", "Lcom/logentries/re2/Encoding;")))); options.set_posix_syntax(env->GetBooleanField(j_options, get_field_id_safe(env, j_options_cls, "posixSyntax", "Z"))); options.set_longest_match(env->GetBooleanField(j_options, get_field_id_safe(env, j_options_cls, "longestMatch", "Z"))); options.set_log_errors(env->GetBooleanField(j_options, get_field_id_safe(env, j_options_cls, "logErrors", "Z"))); options.set_max_mem(safe_cast<uint64_t>(env->GetLongField(j_options, get_field_id_safe(env, j_options_cls, "maxMem", "J")))); options.set_literal(env->GetBooleanField(j_options, get_field_id_safe(env, j_options_cls, "literal", "Z"))); options.set_never_nl(env->GetBooleanField(j_options, get_field_id_safe(env, j_options_cls, "neverNl", "Z"))); options.set_never_capture(env->GetBooleanField(j_options, get_field_id_safe(env, j_options_cls, "neverCapture", "Z"))); options.set_case_sensitive(env->GetBooleanField(j_options, get_field_id_safe(env, j_options_cls, "caseSensitive", "Z"))); options.set_perl_classes(env->GetBooleanField(j_options, get_field_id_safe(env, j_options_cls, "perlClasses", "Z"))); options.set_word_boundary(env->GetBooleanField(j_options, get_field_id_safe(env, j_options_cls, "wordBoundary", "Z"))); }