Экранирование в регулярных выражениях в Rust
Многие знаки в шаблоне имеют особый смысл. Чтобы искать их как обычный текст, перед знаком ставят обратный слэш. В сырой строке Rust для одного слэша в шаблоне пишут два слэша в коде.
Точка без экранирования означает любой символ, а с экранированием - только точку:
use regex::Regex;
fn main() {
let any = Regex::new(r"a.c").expect("bad pattern");
let dot = Regex::new(r"a\.c").expect("bad pattern");
let line = "abc a.c aXc";
println!("{}", any.replace_all(line, "!"));
println!("{}", dot.replace_all(line, "!"));
}
Тот же прием нужен для скобок, звездочки, плюса, крышки и других служебных знаков, если они должны совпасть буквально:
use regex::Regex;
fn main() {
let re = Regex::new(r"\(\d+\)").expect("bad pattern");
let line = "item (12) and (3)";
println!("{}", re.replace_all(line, "*"));
}
Дана строка:
let line = "2 + 2 = 4";
Замените знак плюс между числами на
"plus", не трогая остальной текст.
Дана строка:
let line = "file.txt and fileXtxt";
Найдите только "file.txt" и
замените на "doc".