use ferroni::prelude::*;
fn main() -> Result<(), RegexError> {
let re = Regex::new(r"\d{4}-\d{2}-\d{2}")?;
let m = re
.find("Released on 2026-09-05.")
.expect("date in the text");
println!("found {:?} at bytes {}..{}", m.as_str(), m.start(), m.end());
let re = Regex::new(r"(?<year>\d{4})-(?<month>\d{2})-(?<day>\d{2})")?;
let caps = re
.captures("Released on 2026-09-05.")
.expect("date in the text");
println!(
"year={} month={} day={}",
caps.name("year").unwrap().as_str(),
caps.name("month").unwrap().as_str(),
caps.name("day").unwrap().as_str(),
);
let re = Regex::new(r"\w+@\w+\.\w+")?;
let text = "write to ada@example.com or grace@example.org";
for (i, m) in re.find_iter(text).enumerate() {
println!("address {}: {}", i, m.as_str());
}
let re = Regex::builder(r"hello").case_insensitive(true).build()?;
println!("case-insensitive match: {}", re.is_match("Hello World"));
let doubled = Regex::new(r"\b(\w+) \1\b")?;
println!(
"doubled word: {:?}",
doubled.find("this this is repeated").map(|m| m.as_str()),
);
let after_label = Regex::new(r"(?<=version:\s*)\d+\.\d+\.\d+")?;
println!(
"version: {:?}",
after_label.find("version: 1.3.3").map(|m| m.as_str()),
);
Ok(())
}