'String'上的模式匹配以获得Escaped Quote

时间:2015-02-17 04:50:39

标签: haskell

是否可以对转义报价进行模式匹配?

这是我(错误地)尝试的内容:

g :: String -> Bool
g ('\\':'"':_) = True
g _            = False

但结果并不符合我所希望的功能行为。

ghci> g "\""
False
ghci> g "\\\""
True

1 个答案:

答案 0 :(得分:5)

字符串字符串文字之间存在差异。基本上,字符串是一个接一个的字符列表,字符串文字只是一些符号。符号必须“转义”某些字符,否则会导致语法模糊,但它仍然表示字符串没有转义。

对于包含单个字符"\""的字符串,Haskell表达式"表示法。我们需要反斜杠,因为在没有它的情况下编写"""会使字符串的内容看起来就像一个结束语并打破我们的符号。但字符串本身仍然只有"

当你匹配一个字符串值时,你匹配字符串本身,而不是它的符号。这意味着您不必担心字符串中的转义字符,因为它们仅存在于符号级别。因此,要匹配仅包含"的字符串,您将使用以下模式:

foo ['"'] = ...

如果您尝试使用反斜杠,则会匹配不同的字符串。