use regex::Regex;
pub fn is_match(pattern: &str, text: &str) -> bool {
Regex::new(pattern)
.map(|re| re.is_match(text))
.unwrap_or(false)
}
pub fn find_all(pattern: &str, text: &str) -> Vec<String> {
Regex::new(pattern)
.map(|re| re.find_iter(text).map(|m| m.as_str().to_string()).collect())
.unwrap_or_default()
}
pub fn find_first(pattern: &str, text: &str) -> Option<String> {
Regex::new(pattern)
.ok()
.and_then(|re| re.find(text).map(|m| m.as_str().to_string()))
}
pub fn find_groups(pattern: &str, text: &str) -> Vec<String> {
Regex::new(pattern)
.ok()
.and_then(|re| re.captures(text))
.map(|caps| {
(1..caps.len())
.filter_map(|i| caps.get(i).map(|m| m.as_str().to_string()))
.collect()
})
.unwrap_or_default()
}
pub fn find_all_groups(pattern: &str, text: &str) -> Vec<Vec<String>> {
Regex::new(pattern)
.map(|re| {
re.captures_iter(text)
.map(|caps| {
(1..caps.len())
.filter_map(|i| caps.get(i).map(|m| m.as_str().to_string()))
.collect()
})
.collect()
})
.unwrap_or_default()
}
pub fn replace_all(pattern: &str, text: &str, replacement: &str) -> String {
Regex::new(pattern)
.map(|re| re.replace_all(text, replacement).to_string())
.unwrap_or_else(|_| text.to_string())
}
pub fn replace_first(pattern: &str, text: &str, replacement: &str) -> String {
Regex::new(pattern)
.map(|re| re.replace(text, replacement).to_string())
.unwrap_or_else(|_| text.to_string())
}