diff options
| author | Jonas Maier <jonas@x77.dev> | 2026-06-01 22:40:04 +0200 |
|---|---|---|
| committer | Jonas Maier <jonas@x77.dev> | 2026-06-01 22:40:04 +0200 |
| commit | e662dfa3a074a7603cbb9de473bf8bb45b4bb960 (patch) | |
| tree | 1bbb800bebfe137e82d64da47bca487abdfb786f /src/parse/regex | |
| parent | c73ed9310d8162b71183688de62bf8c1fc8420df (diff) | |
| download | pish-e662dfa3a074a7603cbb9de473bf8bb45b4bb960.tar.gz | |
some more regex tests
Diffstat (limited to 'src/parse/regex')
| -rw-r--r-- | src/parse/regex/mod.rs | 18 |
1 files changed, 17 insertions, 1 deletions
diff --git a/src/parse/regex/mod.rs b/src/parse/regex/mod.rs index 98056cb..51527ae 100644 --- a/src/parse/regex/mod.rs +++ b/src/parse/regex/mod.rs @@ -107,7 +107,7 @@ fn parse_rep(s: &mut super::Cursor<'_>) -> Result<Pattern> { // TODO: non-greedy } -const SYMBOLS: &[u8] = b"{}[]()*+-?|. "; +const SYMBOLS: &[u8] = b"{}[]()*+-?|.\\ "; fn is_symbol(x: u8) -> bool { SYMBOLS.contains(&x) } @@ -183,6 +183,22 @@ fn parse_atom(s: &mut super::Cursor<'_>) -> Result<Pattern> { s.highlight_from(begin, OtherHighlights::RegexSymbol); Ok(Pattern::Range(0, 127)) } + b'\\' => { + s.adv(); + if s.has() { + let escaped = s.adv(); + s.highlight_from(begin, OtherHighlights::RegexSymbol); + + if is_symbol(escaped) { + Ok(Pattern::Byte(escaped)) + } else { + // TODO interpret \w and others + Err(ParseError::Unknown(escaped)) + } + } else { + Err(ParseError::Eof) + } + } x if is_symbol(x) => Ok(Pattern::Nothing), ch => { s.adv(); |
