Класс regex::bytes::Regex
Класс regex::bytes::Regex представляет собой
скомпилированное регулярное выражение, предназначенное
для поиска совпадений в произвольных байтовых
последовательностях. В отличие от regex::Regex,
который работает только с валидными UTF-8 строками,
данный класс позволяет искать совпадения в срезах
типа &[u8], что полезно при обработке бинарных
данных, сетевых протоколов или файлов, которые могут
не быть корректным UTF-8. Метод new принимает
строку с шаблоном регулярного выражения и возвращает
результат типа Result с объектом Regex
или ошибкой компиляции.
Синтаксис
use regex::bytes::Regex;
let re = Regex::new(pattern)?;
Пример
Давайте создадим регулярное выражение для поиска цифр в байтовой строке и проверим его работу:
use regex::bytes::Regex;
fn main()
{
let re = Regex::new(r"\d+").unwrap();
let data = b"abc123def456";
let res = re.find(data);
println!("{:?}", res);
}
Результат выполнения кода:
Some(Match { text: "123", start: 3, end: 6 })
Пример
Давайте найдём все совпадения цифровых последовательностей в байтовом срезе:
use regex::bytes::Regex;
fn main()
{
let re = Regex::new(r"\d+").unwrap();
let data = b"abc123def456";
let res: Vec<&[u8]> = re.find_iter(data)
.map(|m| m.as_bytes())
.collect();
println!("{:?}", res);
}
Результат выполнения кода:
[b"123", b"456"]
Пример
Давайте проверим, содержит ли байтовая последовательность совпадение с шаблоном:
use regex::bytes::Regex;
fn main()
{
let re = Regex::new(r"abc").unwrap();
let data = b"xxabcxx";
let res = re.is_match(data);
println!("{}", res);
}
Результат выполнения кода:
true
Пример
Давайте заменим все вхождения цифр на байтовую строку "N":
use regex::bytes::Regex;
fn main()
{
let re = Regex::new(r"\d").unwrap();
let data = b"abc123def456";
let res = re.replace_all(data, &b"N"[..]);
println!("{:?}", res);
}
Результат выполнения кода:
b"abcNNNdefNNN"