|
|
|
@ -63,16 +63,10 @@ bool DispatchRE2Call(Function regex_function, |
|
|
|
string* out1, |
|
|
|
string* out2, |
|
|
|
string* out3) { |
|
|
|
if (out3) { |
|
|
|
return regex_function(input, regexp, out1, out2, out3); |
|
|
|
} |
|
|
|
if (out2) { |
|
|
|
return regex_function(input, regexp, out1, out2); |
|
|
|
} |
|
|
|
if (out1) { |
|
|
|
return regex_function(input, regexp, out1); |
|
|
|
} |
|
|
|
return regex_function(input, regexp); |
|
|
|
const RE2::Arg outs[] = { out1, out2, out3, }; |
|
|
|
const RE2::Arg* const args[] = { &outs[0], &outs[1], &outs[2], }; |
|
|
|
const int argc = out3 ? 3 : out2 ? 2 : out1 ? 1 : 0; |
|
|
|
return regex_function(input, regexp, args, argc); |
|
|
|
} |
|
|
|
|
|
|
|
// Replaces unescaped dollar-signs with backslashes. Backslashes are deleted
|
|
|
|
@ -108,11 +102,11 @@ class RE2RegExp : public RegExp { |
|
|
|
static_cast<RE2RegExpInput*>(input_string)->Data(); |
|
|
|
|
|
|
|
if (anchor_at_start) { |
|
|
|
return DispatchRE2Call(RE2::Consume, utf8_input, utf8_regexp_, |
|
|
|
return DispatchRE2Call(RE2::ConsumeN, utf8_input, utf8_regexp_, |
|
|
|
matched_string1, matched_string2, |
|
|
|
matched_string3); |
|
|
|
} else { |
|
|
|
return DispatchRE2Call(RE2::FindAndConsume, utf8_input, utf8_regexp_, |
|
|
|
return DispatchRE2Call(RE2::FindAndConsumeN, utf8_input, utf8_regexp_, |
|
|
|
matched_string1, matched_string2, |
|
|
|
matched_string3); |
|
|
|
} |
|
|
|
@ -122,10 +116,10 @@ class RE2RegExp : public RegExp { |
|
|
|
bool full_match, |
|
|
|
string* matched_string) const { |
|
|
|
if (full_match) { |
|
|
|
return DispatchRE2Call(RE2::FullMatch, input_string, utf8_regexp_, |
|
|
|
return DispatchRE2Call(RE2::FullMatchN, input_string, utf8_regexp_, |
|
|
|
matched_string, NULL, NULL); |
|
|
|
} else { |
|
|
|
return DispatchRE2Call(RE2::PartialMatch, input_string, utf8_regexp_, |
|
|
|
return DispatchRE2Call(RE2::PartialMatchN, input_string, utf8_regexp_, |
|
|
|
matched_string, NULL, NULL); |
|
|
|
} |
|
|
|
} |
|
|
|
|