diff options
| author | Jonas Maier <jonas@x77.dev> | 2026-06-05 21:59:49 +0200 |
|---|---|---|
| committer | Jonas Maier <jonas@x77.dev> | 2026-06-05 21:59:56 +0200 |
| commit | 39a849c46cc61cacc84c1d9a7e5c2c05bcf51f1a (patch) | |
| tree | 8792798fa613402b40ac00f7164f03adda28eef5 /src/parse/regex/mod.rs | |
| parent | 959e8f2ea9c0b7f52b3ab98244cb110af179b82c (diff) | |
| download | pish-39a849c46cc61cacc84c1d9a7e5c2c05bcf51f1a.tar.gz | |
parse non-greedy repetitions
Diffstat (limited to 'src/parse/regex/mod.rs')
| -rw-r--r-- | src/parse/regex/mod.rs | 20 |
1 files changed, 8 insertions, 12 deletions
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<Pattern> { 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) } |
