1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37
/*!
# Escape Regex
Escape regular expression special characters in order to make it able to be concatenated safely by users.
## Example
```rust
extern crate escape_regex;
extern crate regex;
use regex::Regex;
let pattern = "123*456";
let escaped_pattern = escape_regex::escape_string(pattern);
let reg = Regex::new(&escaped_pattern).unwrap();
assert_eq!(true, reg.is_match("0123*4567"));
```
*/
static ESCAPE_CHARS: [char; 14] = ['$', '(', ')', '*', '+', '.', '?', '[', '\\', ']', '^', '{', '|', '}'];
pub fn escape_string<S: AsRef<str>>(s: S) -> String {
let mut chars: Vec<char> = Vec::new();
for c in s.as_ref().chars() {
if let Ok(_) = ESCAPE_CHARS.binary_search(&c) {
chars.push('\\');
}
chars.push(c);
}
chars.into_iter().collect()
}