From de6474983156b108874432238174f7c3b60b2945 Mon Sep 17 00:00:00 2001 From: Jonas Maier Date: Fri, 5 Jun 2026 22:12:07 +0200 Subject: submatches --- src/parse/regex/mod.rs | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) (limited to 'src/parse/regex/mod.rs') 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), Rep(Box, u32, Option, GreedyBehavior), Assertion(LookDirection, LookPolarity, Box), + Submatch(Box), 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 { if let Some((dir, pol)) = assertion { Ok(Pattern::Assertion(dir, pol, Box::new(inner))) } else { - Ok(inner) + Ok(Pattern::Submatch(Box::new(inner))) } } b'.' => { -- cgit v1.2.3