From 5a085907cf3b30a03f4141ab54950ecb4a6efa86 Mon Sep 17 00:00:00 2001 From: Aadhavan Srinivasan Date: Fri, 24 Jan 2025 17:06:19 -0500 Subject: [PATCH] WIP - fixing character classes --- compile.go | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/compile.go b/compile.go index e3707ca..834bc4c 100644 --- a/compile.go +++ b/compile.go @@ -82,6 +82,7 @@ func shuntingYard(re string, flags ...ReFlag) ([]postfixNode, error) { // Also check for non-capturing groups. The LPAREN of a non-capturing group looks like this: '(?:' // I take this out, and put in a special character - NONCAPLPAREN_CHAR. // + // Another check is made for unescaped brackets - opening brackets are replaced with LBRACKET and closing brackets are replaced with RBRACKET. // Finally, check for escaped backslashes. Replace these with the BACKSLASH metacharacter. Later, in thompson(), // these will be converted back. This avoids confusiuon in detecting whether a character is escaped eg. detecting // whether '\\[a]' has an escaped opening bracket (it doesn't). @@ -122,6 +123,9 @@ func shuntingYard(re string, flags ...ReFlag) ([]postfixNode, error) { } else if c == '\\' && i < len(re_runes_orig)-1 && re_runes_orig[i+1] == '\\' { // Escaped backslash re_runes = append(re_runes, ESC_BACKSLASH) i++ + } else if c == '[' && (i == 0 || re_runes_orig[i-1] != '\\') + + } else { re_runes = append(re_runes, c) }