diff options
Diffstat (limited to 'src/parse/regex/mod.rs')
| -rw-r--r-- | src/parse/regex/mod.rs | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/src/parse/regex/mod.rs b/src/parse/regex/mod.rs index fed792c..486b0d9 100644 --- a/src/parse/regex/mod.rs +++ b/src/parse/regex/mod.rs @@ -58,6 +58,7 @@ pub enum Pattern { Concat(Vec<Pattern>), Rep(Box<Pattern>, u32, Option<u32>, GreedyBehavior), Assertion(LookDirection, LookPolarity, Box<Pattern>), + Submatch(Box<Pattern>), Nothing, } @@ -141,6 +142,7 @@ impl Pattern { Pattern::Rep(_, _, None, _) => ByteConsumption::Unbounded, Pattern::Assertion(_, _, _) => ByteConsumption::zero(), Pattern::Nothing => ByteConsumption::zero(), + Pattern::Submatch(pat) => pat.max_byte_consumption(), } } @@ -152,6 +154,7 @@ impl Pattern { Concat(patterns) => Concat(patterns.into_iter().map(Self::reverse).rev().collect()), Rep(pattern, min, max, greedy) => Rep(Box::new(pattern.reverse()), min, max, greedy), Assertion(dir, pol, pat) => Assertion(dir.reverse(), pol, Box::new(pat.reverse())), + Submatch(pat) => Submatch(Box::new(pat.reverse())) } } } @@ -342,7 +345,7 @@ fn parse_atom(s: &mut super::Cursor<'_>) -> Result<Pattern> { if let Some((dir, pol)) = assertion { Ok(Pattern::Assertion(dir, pol, Box::new(inner))) } else { - Ok(inner) + Ok(Pattern::Submatch(Box::new(inner))) } } b'.' => { |
