26 lines
751 B
Rust
26 lines
751 B
Rust
// Copied from regex_syntax crate to avoid pulling in the whole crate just for a utility function
|
|
// https://github.com/rust-lang/regex/blob/ff283badce21dcebd581909d38b81f2c8c9bfb54/regex-syntax/src/lib.rs
|
|
|
|
pub fn escape(text: &str) -> String {
|
|
let mut quoted = String::new();
|
|
escape_into(text, &mut quoted);
|
|
quoted
|
|
}
|
|
|
|
fn escape_into(text: &str, buf: &mut String) {
|
|
buf.reserve(text.len());
|
|
for c in text.chars() {
|
|
if is_meta_character(c) {
|
|
buf.push('\\');
|
|
}
|
|
buf.push(c);
|
|
}
|
|
}
|
|
|
|
fn is_meta_character(c: char) -> bool {
|
|
match c {
|
|
'\\' | '.' | '+' | '*' | '?' | '(' | ')' | '|' | '[' | ']' | '{' | '}' | '^' | '$'
|
|
| '#' | '&' | '-' | '~' => true,
|
|
_ => false,
|
|
}
|
|
}
|