diff options
| author | Jonas Maier <jonas@x77.dev> | 2026-06-05 22:12:07 +0200 |
|---|---|---|
| committer | Jonas Maier <jonas@x77.dev> | 2026-06-05 22:14:09 +0200 |
| commit | de6474983156b108874432238174f7c3b60b2945 (patch) | |
| tree | 5a587be9ac76992a3684389834d67c51ac63118e /src/parse/regex/mod.rs | |
| parent | f06e116154bd6da5b7b3496e4ee23b5bd96745d3 (diff) | |
| download | pish-de6474983156b108874432238174f7c3b60b2945.tar.gz | |
submatches
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'.' => { |
