3 ms·
I translated this into Haskell just for fun. match :: String -> String -> Bool match ('^':rest) text = matchLocal rest text match rex (c
by nilkn 14y ago
I translated this into Haskell just for fun.
match :: String -> String -> Bool
match ('^':rest) text = matchLocal rest text
match rex (c:rest) = matchLocal rex (c:rest) || match rex rest
match _ _ = False
matchLocal :: String -> String -> Bool
matchLocal [] _ = True
matchLocal "$" [] = True
matchLocal (c:'*':restR) (t:restT) = c == t && matchLocal restR (starSkip c (t:restT))
matchLocal (r:restR) (t:restT) = (r == '.' || r == t) && matchLocal restR restT
matchLocal _ _ = False
starSkip :: Char -> String -> String
starSkip c (t:rest) = if c == t then starSkip c rest else t:rest
starSkip _ [] = []