diff options
| author | Jonas Maier <jonas@x77.dev> | 2026-06-03 20:18:14 +0200 |
|---|---|---|
| committer | Jonas Maier <jonas@x77.dev> | 2026-06-03 20:19:22 +0200 |
| commit | 7c7a10dd58d50bacc712e91e2344c466a22a2d25 (patch) | |
| tree | d36eb78f21c19349148eb76222c27f5b753b2462 /src | |
| parent | 65b1a84fbda96d65565c4e3d6cc1f3c89285aab7 (diff) | |
| download | pish-7c7a10dd58d50bacc712e91e2344c466a22a2d25.tar.gz | |
regex: more lenient [bracket] parsing
Diffstat (limited to 'src')
| -rw-r--r-- | src/parse/regex/mod.rs | 16 |
1 files changed, 8 insertions, 8 deletions
diff --git a/src/parse/regex/mod.rs b/src/parse/regex/mod.rs index d0335f0..63808cd 100644 --- a/src/parse/regex/mod.rs +++ b/src/parse/regex/mod.rs @@ -152,10 +152,6 @@ fn parse_atom(s: &mut super::Cursor<'_>) -> Result<Pattern> { return Ok(Pattern::Alt(ranges)); } - if is_symbol(tok) { - return Err(ParseError::Unknown(tok)); - } - let begin = s.loc(); if s.has() && s.peek() == b'-' { s.adv(); @@ -164,13 +160,17 @@ fn parse_atom(s: &mut super::Cursor<'_>) -> Result<Pattern> { if !s.has() { return Err(ParseError::Eof); } - let tok2 = s.adv(); + let tok2 = s.peek(); - if is_symbol(tok2) { + if tok2 == b']' { + ranges.push(Pattern::Byte(tok)); + ranges.push(Pattern::Byte(b'-')); + } else if is_symbol(tok2) { return Err(ParseError::Unknown(tok2)); + } else { + s.adv(); + ranges.push(Pattern::Range(tok, tok2)); } - - ranges.push(Pattern::Range(tok, tok2)); } else { ranges.push(Pattern::Byte(tok)); } |
