Многострочность в регулярках в Rust
Без флага крышка и доллар привязаны к началу и концу всего текста целиком. Многострочный режим переносит эти края на границы каждой строки внутри текста.
Флаг можно включить в начале шаблона или
через сборщик шаблона с полем
multi_line:
use regex::RegexBuilder;
fn main() {
let re = RegexBuilder::new(r"^\w+")
.multi_line(true)
.build()
.expect("bad pattern");
let line = "first\nsecond\nthird";
for m in re.find_iter(line) {
println!("{}", m.as_str());
}
}
Тот же флаг в тексте шаблона записывают
как (?m) в начале. Тогда доллар
совпадет с концом каждой строки:
use regex::Regex;
fn main() {
let re = Regex::new(r"(?m)line$").expect("bad pattern");
let text = "first line\nsecond line";
println!("{}", re.replace_all(text, "!"));
}
Дана строка:
let text = "aa\nbb\ncc";
С многострочным режимом найдите буквы в начале каждой строки и выведите их списком.
Дана строка:
let text = "one\ntwo";
Объясните, почему шаблон с крышкой без флага найдет только первую строку.