// 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"(?m)^(?:([[:xdigit:]]{2})([^[:xdigit:]]?)(?1)(\2(?1))(?3){3}|((?1){2})((?2))(?4)\5(?4))$").unwrap();
  let string = "# Common formats :
fc:92:3b:ed:cb:a9
fc-92-3b-ed-cb-a9
fc92.3bed.cba9
# Matching is case insensitive :
fC:92:3b:Ed:cB:a9
fC92.3bEd.cBa9
# Separator can be empty or any character execept hexadecimal ones :
fc 92 3b ed cb a9
fc92g3bedgcba9
fc923bedcba9
# Separators must be identicals, will not match otherwise :
fc:92:3b-ed:cb:a9
fc92.3bed;cba9";
  
  // result will be an iterator over tuples containing the start and end indices for each match in the string
  let result = regex.captures_iter(string);
  
  for mat in result {
    println!("{:?}", mat);
  }
}
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/