aboutsummaryrefslogtreecommitdiffstats
path: root/src/parse/regex/mod.rs
diff options
context:
space:
mode:
authorJonas Maier <jonas@x77.dev>2026-06-05 22:12:07 +0200
committerJonas Maier <jonas@x77.dev>2026-06-05 22:14:09 +0200
commitde6474983156b108874432238174f7c3b60b2945 (patch)
tree5a587be9ac76992a3684389834d67c51ac63118e /src/parse/regex/mod.rs
parentf06e116154bd6da5b7b3496e4ee23b5bd96745d3 (diff)
downloadpish-de6474983156b108874432238174f7c3b60b2945.tar.gz
submatches
Diffstat (limited to 'src/parse/regex/mod.rs')
-rw-r--r--src/parse/regex/mod.rs5
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'.' => {