diff options
-rw-r--r-- | src/Test.hs | 7 |
1 files changed, 6 insertions, 1 deletions
diff --git a/src/Test.hs b/src/Test.hs index e21eaee..25f3c09 100644 --- a/src/Test.hs +++ b/src/Test.hs @@ -14,6 +14,7 @@ module Test ( import Control.Monad +import Data.Char import Data.List import Data.Text (Text) import qualified Data.Text as T @@ -74,7 +75,11 @@ eval (Concat xs) = T.concat <$> mapM eval xs eval (Regex xs) = do parts <- forM xs $ \case StringLit str -> return str - expr -> T.concatMap (\c -> T.pack ['\\', c]) <$> eval expr + expr -> T.concatMap escapeChar <$> eval expr + where + escapeChar c | isAlphaNum c = T.singleton c + | c `elem` "`'<>" = T.singleton c + | otherwise = T.pack ['\\', c] case compile defaultCompOpt defaultExecOpt $ T.concat $ concat [[T.singleton '^'], parts, [T.singleton '$']] of Left err -> fail err Right re -> return re |