// include the latest version of the regex crate in your Cargo.toml
extern crate regex;
use regex::Regex;
fn main() {
let regex = Regex::new(r"(?x)^ # начало строки
(?:
([a-z]) | # 1 гр
([A-Z]) | # 2 гр
([0-9]) # 3 гр
)
(?(1) # если совпала 1 гр
[a-z]*+ # захватываем все символы как в 1 гр
(?:
([A-Z]) | # 4 гр
([0-9]) # 5 гр
)
(?(4) # если совпала 4 гр
[a-zA-Z]*+ # захватываем все символы как в 1 и 4 гр
[0-9]
[a-zA-Z0-9]*+
$ # закрыли весь поиск
| # иначе если совпала 4 гр
(?(5) # если совпала 5 гр
[a-z0-9]*+ #захватываем все символы как в 1 и 5 гр
[A-Z]
[a-zA-Z0-9]*+
$
| # иначе если совпала 5 гр
(?!) # роняем матчинг
) # конец если совпала 5 гр
) # конец если совпала 4 гр
) # конец если совпала 1 гр
(?(2) # если совпала 2 гр
[A-Z]*+ # захватываем все символы как в 2 гр
(?:
([a-z]) | # 6 гр
([0-9]) # 7 гр
)
(?(6) # если совпала 6 гр
[a-zA-Z]*+ # захватываем все символы как в 2 и 6 гр
[0-9]
[a-zA-Z0-9]*+
$ # закрыли весь поиск
| # иначе если совпала 6 гр
(?(7) # если совпала 7 гр
[A-Z0-9]*+ #захватываем все символы как в 2 и 7 гр
[a-z]
[a-zA-Z0-9]*+
$
| # иначе если совпала 7 гр
(?!) # роняем матчинг
) # конец если совпала 7 гр
) # конец если совпала 6 гр
) # конец если совпала 2 гр
(?(3) # если совпала 3 гр
[0-9]*+ # захватываем все символы как в 3 гр
(?:
([A-Z]) | # 8 гр
([a-z]) # 9 гр
)
(?(8) # если совпала 8 гр
[0-9A-Z]*+ # захватываем все символы как в 3 и 8 гр
[a-z]
[a-zA-Z0-9]*+
$ # закрыли весь поиск
| # иначе если совпала 8 гр
(?(9) # если совпала 9 гр
[0-9a-z]*+ #захватываем все символы как в 3 и 9 гр
[A-Z]
[a-zA-Z0-9]*+
$
| # иначе если совпала 5 гр
(?!) # роняем матчинг
) # конец если совпала 5 гр
) # конец если совпала 8 гр
) # конец если совпала 3 гр").unwrap();
let string = "AaluhfDnaoufbicbIHBDIHBKJXNdCJKfBCNCNX5BCHBAHIBAVIsdniuhuygvD6w489bgtvdihfcbsigdbcsihcgfisyg8AaluhfDnaoufbicbIHBDIHBKJXNdCJKfBCNCNX5BCHBAHIBAVIsdniuhuygvD6w489bgtvdihfcbsigdbcsihcgfisyg8AaluhfDnaoufbicbIHBDIHBKJXNdCJKfBCNCNX5BCHBAHIBAVIsdniuhuygvD6w489bgtvdihfcbsigdbcsihcgfisyg8AaluhfDnaoufbicbIHBDIHBKJXNdCJKfBCNCNX5BCHBAHIBAVIsdniuhuygvD6w489bgtvdihfcbsigdbcsihcgfisyg8AaluhfDnaoufbicbIHBDIHBKJXNdCJKfBCNCNX5BCHBAHIBAVIsdniuhuygvD6w489bgtvdihfcbsigdbcsihcgfisyg8AaluhfDnaoufbicbIHBDIHBKJXNdCJKfBCNCNX5BCHBAHIBAVIsdniuhuygvD6w489bgtvdihfcbsigdbcsihcgfisyg8AaluhfDnaoufbicbIHBDIHBKJXNdCJKfBCNCNX5BCHBAHIBAVIsdniuhuygvD6w489bgtvdihfcbsigdbcsihcgfisyg8AaluhfDnaoufbicbIHBDIHBKJXNdCJKfBCNCNX5BCHBAHIBAVIsdniuhuygvD6w489bgtvdihfcbsigdbcsihcgfisyg8AaluhfDnaoufbicbIHBDIHBKJXNdCJKfBCNCNX5BCHBAHIBAVIsdniuhuygvD6w489bgtvdihfcbsigdbcsihcgfisyg8AaluhfDnaoufbicbIHBDIHBKJXNdCJKfBCNCNX5BCHBAHIBAVIsdniuhuygvD6w489bgtvdihfcbsigdbcsihcgfisyg8AaluhfDnaoufbicbIHBDIHBKJXNdCJKfBCNCNX5BCHBAHIBAVIsdniuhuygvD6w489bgtvdihfcbsigdbcsihcgfisyg8";
// result will be a tuple containing the start and end indices for the first match in the string
let result = regex.captures(string);
let (start, end) = match result {
Some((s, e)) => (s, e),
None => {
// ...
}
};
println!("{}", &string[start, end]);
}
Please keep in mind that these code samples are automatically generated and are not guaranteed to work. If you find any syntax errors, feel free to submit a bug report. For a full regex reference for Rust, please visit: https://docs.rs/regex/latest/regex/