From 39a849c46cc61cacc84c1d9a7e5c2c05bcf51f1a Mon Sep 17 00:00:00 2001 From: Jonas Maier Date: Fri, 5 Jun 2026 21:59:49 +0200 Subject: parse non-greedy repetitions --- src/parse/regex/mod.rs | 20 ++++++++------------ 1 file changed, 8 insertions(+), 12 deletions(-) (limited to 'src/parse/regex/mod.rs') diff --git a/src/parse/regex/mod.rs b/src/parse/regex/mod.rs index 79e234f..6b7bc9e 100644 --- a/src/parse/regex/mod.rs +++ b/src/parse/regex/mod.rs @@ -1,4 +1,4 @@ -use crate::parse::{NotImplementedKind, OtherHighlights}; +use crate::parse::OtherHighlights; use super::{Parse, ParseError, Result}; @@ -234,18 +234,14 @@ fn parse_rep(s: &mut super::Cursor<'_>) -> Result { s.adv(); s.highlight_from(begin, OtherHighlights::RegexSymbol); - if s.has() && s.peek() == b'?' { - return Err(ParseError::NotYetImplemented( - NotImplementedKind::NonGreedyRegexRepetition, - )); - } + let greed = if s.has() && s.peek() == b'?' { + s.adv(); + GreedyBehavior::NonGreedy + } else { + GreedyBehavior::Greedy + }; - Ok(Pattern::Rep( - Box::new(atom), - min_rep, - max_rep, - GreedyBehavior::Greedy, - )) + Ok(Pattern::Rep(Box::new(atom), min_rep, max_rep, greed)) } else { Ok(atom) } -- cgit v1.2.3