blob: aabf509b0dd7f867cafb65a2f066818797490c00 [file] [log] [blame]
diff --git a/re2/re2.cc b/re2/re2.cc
index 85ba1f4..0f23c22 100644
--- a/re2/re2.cc
+++ b/re2/re2.cc
@@ -55,7 +55,8 @@ RE2::Options::Options(RE2::CannedOptions opt)
case_sensitive_(true),
perl_classes_(false),
word_boundary_(false),
- one_line_(false) {
+ one_line_(false),
+ ignore_replace_escape_(false) {
}
// static empty objects for use as const references.
@@ -1030,9 +1031,13 @@ bool RE2::Rewrite(std::string* out,
} else if (c == '\\') {
out->push_back('\\');
} else {
- if (options_.log_errors())
- LOG(ERROR) << "invalid rewrite pattern: " << rewrite.data();
- return false;
+ if (options_.ignore_replace_escape()) {
+ out->push_back(*s);
+ } else {
+ if (options_.log_errors())
+ LOG(ERROR) << "invalid rewrite pattern: " << rewrite.data();
+ return false;
+ }
}
}
return true;
diff --git a/re2/re2.h b/re2/re2.h
index 09c1fbe..79fe995 100644
--- a/re2/re2.h
+++ b/re2/re2.h
@@ -665,7 +665,8 @@ class RE2 {
case_sensitive_(true),
perl_classes_(false),
word_boundary_(false),
- one_line_(false) {
+ one_line_(false),
+ ignore_replace_escape_(false) {
}
/*implicit*/ Options(CannedOptions);
@@ -709,6 +710,9 @@ class RE2 {
bool one_line() const { return one_line_; }
void set_one_line(bool b) { one_line_ = b; }
+ bool ignore_replace_escape() const { return ignore_replace_escape_; }
+ void set_ignore_replace_escape(bool b) { ignore_replace_escape_ = b; }
+
void Copy(const Options& src) {
*this = src;
}
@@ -729,6 +733,7 @@ class RE2 {
bool perl_classes_;
bool word_boundary_;
bool one_line_;
+ bool ignore_replace_escape_;
};
// Returns the options set in the constructor.