// 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"(?iuxm)^
((http|https):)?(?(1)//|.)# protocol
(([\.\pL\pN-]+:)?([\.\pL\pN-]+)@)?# basic auth
(
([\pL\pN\pS\-\.])+(?(1)\.?|\.)([\pL\pN\pS\-\.])+|((?(1)\.?|\.)([\pL\pN]|xn\-\-[\pL\pN-]+)+\.?)# domain name
| \d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}# ip address
)
(:[0-9]+)?# port
(?:/ (?:[\pL\pN\-._\~!$&'()*+,;=:@]|%[0-9A-Fa-f]{2})* )*# path
(?:\?(?:[\pL\pN\-._\~!$&'()*+,;=:@/?]|%[0-9A-Fa-f]{2})* )?# query
(?:\# (?:[\pL\pN\-._\~!$&'()*+,;=:@/?]|%[0-9A-Fa-f]{2})* )?# fragment
$").unwrap();
let string = "localhost.fhgf";
// 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/