aboutsummaryrefslogtreecommitdiffstats
path: root/src/parse/regex/mod.rs
diff options
context:
space:
mode:
authorJonas Maier <jonas@x77.dev>2026-06-05 21:59:49 +0200
committerJonas Maier <jonas@x77.dev>2026-06-05 21:59:56 +0200
commit39a849c46cc61cacc84c1d9a7e5c2c05bcf51f1a (patch)
tree8792798fa613402b40ac00f7164f03adda28eef5 /src/parse/regex/mod.rs
parent959e8f2ea9c0b7f52b3ab98244cb110af179b82c (diff)
downloadpish-39a849c46cc61cacc84c1d9a7e5c2c05bcf51f1a.tar.gz
parse non-greedy repetitions
Diffstat (limited to 'src/parse/regex/mod.rs')
-rw-r--r--src/parse/regex/mod.rs20
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)
}