我是Haskell和Parsec的新手。
我想解析字符串's:numb:“string”;'的php-serialize格式。喜欢
s:12:“123”; 6789012“;
数字是字符数。
因此,函数如下所示:
newtype PhpString = PhpString String
pString :: GenParser Char st PhpString
pString = do { string "s:"
; value1 <- many1 digit
; string ":\""
; value2 <- takeExactNChars (read value1)
; string "\";"
; return $ PhpString value2
}
where
takeExactNChars n = ???????
最佳答案
我会使用Control.Monad的replicateM
编写它:
import Text.ParserCombinators.Parsec
import Control.Monad (replicateM)
pString :: Parser String
pString = do string "s:"
n <- fmap read (many1 digit)
string ":\"" -- Bug fix; you weren't picking up the colon
s <- replicateM n anyChar
string "\";"
return s
在ghci中对其进行测试:
*Main> parse pString "" "s:12:\"123\";6789012\";"
Right "123\";6789012"
关于haskell - 如何使用Parsec读取确切的N个字符?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15474016/