1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
extern crate regex;
use regex::Regex;

#[allow(unused_must_use)]
pub fn search(
    is_case_insensitive: bool,
    content: &str,
    pattern: &str,
    mut writer: impl std::io::Write,
) {
    let pattern = if is_case_insensitive {
        pattern.to_lowercase()
    } else {
        pattern.to_string()
    };

    let regex = Regex::new(&pattern).unwrap();
    for line in content.lines() {
        if regex.is_match(line) {
            writeln!(writer, "{}", line);
        }
    }
}