1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
mod candidate;
mod composite_pattern;
mod content_pattern;
mod content_regex_pattern;
mod exact_pattern;
mod fuzzy_pattern;
mod input_pattern;
mod name_match;
mod operator;
mod pattern;
mod pattern_object;
mod pattern_parts;
mod pos;
mod regex_pattern;
mod search_mode;
mod tok_pattern;
pub use {
candidate::Candidate,
composite_pattern::CompositePattern,
content_pattern::ContentExactPattern,
content_regex_pattern::ContentRegexPattern,
exact_pattern::ExactPattern,
fuzzy_pattern::FuzzyPattern,
input_pattern::InputPattern,
name_match::NameMatch,
pattern::Pattern,
pattern_object::PatternObject,
pattern_parts::PatternParts,
pos::*,
operator::PatternOperator,
regex_pattern::RegexPattern,
search_mode::*,
tok_pattern::*,
};
use crate::errors::PatternError;
pub fn build_regex(pat: &str, flags: &str) -> Result<regex::Regex, PatternError> {
let mut builder = regex::RegexBuilder::new(pat);
for c in flags.chars() {
match c {
'i' => {
builder.case_insensitive(true);
}
'U' => {
builder.swap_greed(true);
}
_ => {
return Err(PatternError::UnknownRegexFlag { bad: c });
}
}
}
Ok(builder.build()?)
}