From a65e64115a1e19033c3d51bb1a89081e6a03d3aa Mon Sep 17 00:00:00 2001 From: Stephen Morgan Date: Wed, 9 Mar 2022 12:13:59 +1100 Subject: [PATCH] fix: alias: Allow escaped characters in regular expression aliases. (#982) --- hledger-lib/Hledger/Read/Common.hs | 11 ++++++----- hledger/test/account-aliases.test | 15 +++++++++++++++ 2 files changed, 21 insertions(+), 5 deletions(-) diff --git a/hledger-lib/Hledger/Read/Common.hs b/hledger-lib/Hledger/Read/Common.hs index f32061d7e..0e0f4f627 100644 --- a/hledger-lib/Hledger/Read/Common.hs +++ b/hledger-lib/Hledger/Read/Common.hs @@ -1515,11 +1515,12 @@ basicaliasp = do regexaliasp :: TextParser m AccountAlias regexaliasp = do -- dbgparse 0 "regexaliasp" - char '/' - off1 <- getOffset - re <- some $ noneOf ("/\n\r" :: [Char]) -- paranoid: don't try to read past line end - off2 <- getOffset - char '/' + (off1, off2, re) <- between (char '/') (char '/') $ do + off1 <- getOffset + re <- some $ noneOf ("/\\\n\r" :: [Char]) -- paranoid: don't try to read past line end + <|> (char '\\' *> anySingle) -- allow escaping any character + off2 <- getOffset + return (off1, off2, re) skipNonNewlineSpaces char '=' skipNonNewlineSpaces diff --git a/hledger/test/account-aliases.test b/hledger/test/account-aliases.test index 2ad166270..09cd2e9b7 100644 --- a/hledger/test/account-aliases.test +++ b/hledger/test/account-aliases.test @@ -252,3 +252,18 @@ $ hledger -f- --alias old="new USD" print | hledger -f- print other >=0 + +# 18. Make sure you can match forward slashes in regexps by escaping them. (#982) +< +alias /\// = : + +2021-01-01 + hi/there 1 + b + +$ hledger -f- print +2021-01-01 + hi:there 1 + b + +>=0