Позиция совпадения в регулярных выражениях в Rust
У найденного фрагмента есть смещения в исходной строке. Начало и конец считают в байтах UTF-8, а не в номерах символов Юникода.
После поиска можно вывести сам текст и границы:
use regex::Regex;
fn main() {
let re = Regex::new(r"\d+").expect("bad pattern");
let line = "id:42 tail";
if let Some(m) = re.find(line) {
println!("{} {} {}", m.as_str(), m.start(), m.end());
}
}
Сравнение начала с нулем показывает, совпало ли с самого начала строки. Это замена отдельной проверки совпадения с начала строки в других библиотеках:
use regex::Regex;
fn main() {
let re = Regex::new(r"[A-Z]\w+").expect("bad pattern");
let line = "Rust lang";
if let Some(m) = re.find(line) {
println!("{}", m.start() == 0);
}
}
Дана строка:
let line = "xx hello";
Найдите слово "hello" и выведите
его начало и конец в байтах.
Дана строка:
let line = "start end";
Проверьте по позиции начала, совпадает ли первое слово с началом строки.