From ab9771301323cef2ee12d22521e861210ef81a73 Mon Sep 17 00:00:00 2001 From: Avril Date: Thu, 30 Apr 2020 21:08:26 +0100 Subject: [PATCH] added feature "perl": use pcre --- Cargo.toml | 6 +++++- src/main.rs | 44 +++++++++++++++++++++++++++++++++++++++----- 2 files changed, 44 insertions(+), 6 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index 2ee2b28..6744052 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -6,5 +6,9 @@ edition = "2018" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html +[features] +perl = ["pcre"] + [dependencies] -regex = "1" \ No newline at end of file +regex = "1" +pcre = { version = "0.2.3", optional = true } diff --git a/src/main.rs b/src/main.rs index 3851e1f..1e441f9 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,6 +1,10 @@ +#[cfg(not(feature = "perl"))] extern crate regex; + +#[cfg(not(feature = "perl"))] use regex::Regex; +#[cfg(not(feature = "perl"))] fn main() { let args: Vec = std::env::args().collect(); @@ -11,12 +15,42 @@ fn main() { let text = &args[1]; let group: usize = args[3].parse().expect("Invalid group number."); - let groups = re.captures(&text).unwrap(); + match re.captures(&text) { - if group > groups.len() { - eprintln!("Invalid group number."); - } else { - println!("{}", groups.get(group).unwrap().as_str()); + Some(groups) => { + if group > groups.len() { + eprintln!("Invalid group number."); + } else { + println!("{}", groups.get(group).unwrap().as_str()); + } + } + None => (), } } } + +#[cfg(feature = "perl")] +extern crate pcre; + +#[cfg(feature = "perl")] +use pcre::Pcre; + +#[cfg(feature = "perl")] +fn main () { + let args: Vec = std::env::args().collect(); + + if args.len() < 4 { + println!("Usage: {} ", args[0]); + } else { + let mut re = Pcre::compile(&args[2]).expect("Invalid regex."); + let text = &args[1]; + let group: usize = args[3].parse().expect("Invalid group number."); + + match re.exec(&text) { + + Some(m) if m.string_count() > group => println!("{}", m.group(group)), + _ => (), + } + } +} +