aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorJonas Maier <jonas@x77.dev>2026-06-01 22:40:04 +0200
committerJonas Maier <jonas@x77.dev>2026-06-01 22:40:04 +0200
commite662dfa3a074a7603cbb9de473bf8bb45b4bb960 (patch)
tree1bbb800bebfe137e82d64da47bca487abdfb786f /src
parentc73ed9310d8162b71183688de62bf8c1fc8420df (diff)
downloadpish-e662dfa3a074a7603cbb9de473bf8bb45b4bb960.tar.gz
some more regex tests
Diffstat (limited to 'src')
-rw-r--r--src/parse/regex/mod.rs18
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();