Спецсимволы внутри наборов в Rust
Внутри набора многие знаки теряют особый смысл. Точка там - обычная точка, звездочка и плюс не задают повтор, а ищутся как текст, если их не экранировать.
Сравним точку снаружи и внутри набора на одной строке:
use regex::Regex;
fn main() {
let outside = Regex::new(r"a.c").expect("bad pattern");
let inside = Regex::new(r"a[.]c").expect("bad pattern");
let line = "abc a.c aXc";
println!("{}", outside.replace_all(line, "!"));
println!("{}", inside.replace_all(line, "!"));
}
Скобки и обратный слэш внутри набора тоже можно перечислять буквально, если они нужны как символы строки:
use regex::Regex;
fn main() {
let re = Regex::new(r"[()[\]{}]").expect("bad pattern");
let line = "no (brackets) here";
println!("{}", re.replace_all(line, "#"));
}
Дана строка:
let line = "a*b a.b aXb";
Составьте набор, который найдет только
"a.b", и замените на "ok".
Дана строка:
let line = "x+y x*y";
Найдите знак плюс как обычный символ
между буквами и замените на "-".